Angenommen, ich starte in meinem lokalen Konto:
avindra@host:~>
dann wechsle ich zu root:
host:~ #
Dann wechsle ich zu Orakel:
[ oracle@host:~]
Gibt es eine Möglichkeit, in die Root-Shell (die übergeordnete Shell) zurückzukehren, ohne mich von der Oracle-Shell abzumelden?
Dies ist in diesem Fall praktisch, da das Oracle-Konto keine Sudo-Berechtigungen hat. Zum Beispiel bin ich in / some / really / deeply / nested / directory in oracle und habe alle möglichen speziellen Umgebungsvariablen eingerichtet. Aber ich muss wieder in root sein, um einige Systemdateien zu berühren.
Derzeit würde ich die Oracle-Shell verlassen, um wieder zum Root-Verzeichnis zurückzukehren, meine Root-Befehle auszuführen und dann wieder zu Oracle zu wechseln. Der Nachteil ist, dass ich von Anfang an angemeldet bin und mein Arbeitsverzeichnis und meine Arbeitsumgebung verliere.
Gibt es dennoch eine Möglichkeit, das zu tun, wonach ich frage?
Antworten:
CTRL-Z
Mit dem folgendenkill
Befehl können Sie einen Prozess simulieren (mit dem Sie normalerweise einen Prozess vorübergehend im Hintergrund ausführen) :bash
Fängt einfach dieCTRL-Z
Tastenkombination ein.kill -19
sendetSIGSTP
an den Prozess, der effektiv die gleiche Sache ist.quelle
zsh
kann man einfach laufensuspend
.zsh
odercsh
,tcsh
oderbash
, oder die Bourne-Shell oderksh
... (inksh
, suspend ist ein Alias für'kill -s STOP $$'
(beachten Sie den Fehler mit den fehlenden Anführungszeichen um $$)).bash
funktioniert nicht trap STRG + Z, wenn Sie STRG + Z drücken, Ihr Terminal - Emulator ein sendet^Z
Zeichen (0x1a) an die Master - Seite des pty Gerät. Die Leitungsdisziplin des Pty-Treibers sendet dann SIGTSTP an die Vordergrundprozessgruppe des Terminals. Bis dahinbash
ist überhaupt nicht beteiligt. Das SIGTSTP kann der Prozess Gruppenleiter führen zu suspendieren und dann die ,wait()
diebash
auf sie tut zurückkehren wird.19
für die Anzahl der SIGTSTP gibt. Verwenden Siekill -s TSTP
oderkill -s STOP
(TSTP kann abgefangen oder ignoriert werden, STOP kann nicht).$$
kann nur gelesen werden, ist es aberIFS
nicht. Versuchen SieIFS=0123456789; suspend
inksh
zum Beispiel.Csh, bash, ksh, zsh haben einen
suspend
eingebauten Befehl (oder Alias in ksh), der genau das tut. Dieser Befehl entspricht größtenteils dem Senden eines TSTP-Signals an die Shell. Bash und Zsh erledigen einen zusätzlichen Signal-Handler und Jonglieren. In diesen Shellssuspend
funktioniert der Befehl auch, wenn die Shell TSTP derzeit ignoriert.Sie können das Signal auch manuell mit an die Shell senden
kill -STOP $$
.quelle
Ich würde auch vorschlagen, dass Sie ein Programm mit dem Namen verwenden (falls erforderlich installieren)
[screen][1]
, mit dem Sie mehrere Terminalfenster öffnen können. Es wurde für TTYS entwickelt, funktioniert also einwandfrei, ohne dass es benötigt wirdX
. Sie können Tastenkombinationen verwenden, um zwischen Terminals zu wechseln und die Verbindung zu trennen und sich abzumelden. Dabei bleiben Ihre Terminals weiterhin aktiv. Anschließend können Sie sich erneut anmelden und eine Verbindung zu ihnen herstellen.Ich glaube, die meisten Linux-Distributionen haben Pakete für dieses Programm, und ich habe Pakete für Solaris verwendet. Das Schlimmste ist natürlich, dass Sie von der Quelle installieren können.
quelle