Wechseln Sie zur übergeordneten Shell, ohne sich abzumelden

29

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?

Avindra Goolcharan
quelle
Wenn Sie einen GUI-Desktop verwenden, können Sie einfach ein anderes Terminalfenster oder eine andere Registerkarte öffnen oder sogar zu einer anderen virtuellen Konsole wechseln. Wenn nicht, verwenden Sie den Bildschirm wie in einer der Antworten angegeben.
Joe
Ich werde in den Bildschirm schauen, ich habe es noch nie benutzt. Was Registerkarten betrifft, bevorzuge ich die Verwendung einer Registerkarte für den Host. Ich finde einen Workflow, der mehrere Tabs pro Host beinhaltet, umständlich. Ich arbeite viel in Cluster-Hosts / verteilten Systemen, sodass es verwirrend sein kann, nur eine Registerkarte pro Knoten im Cluster zu haben. In meinen Augen ist ein Tab = ein einzelner Host.
Avindra Goolcharan

Antworten:

41

CTRL-ZMit dem folgenden killBefehl können Sie einen Prozess simulieren (mit dem Sie normalerweise einen Prozess vorübergehend im Hintergrund ausführen) :

[tsa20@xxx01:/home/tsa20/software]$ kill -19 $$

[1]+  Stopped                 sudo -iu tsa20
[root@xxx01 ~]# fg
sudo -iu tsa20
[tsa20@xxx01:/home/tsa20/software]$

bashFängt einfach die CTRL-ZTastenkombination ein. kill -19sendet SIGSTPan den Prozess, der effektiv die gleiche Sache ist.

Bratchley
quelle
1
In zshkann man einfach laufen suspend.
Mikel
3
@Mikel, zshoder csh, tcshoder bash, oder die Bourne-Shell oder ksh... (in ksh, suspend ist ein Alias ​​für'kill -s STOP $$' (beachten Sie den Fehler mit den fehlenden Anführungszeichen um $$)).
Stéphane Chazelas
2
bashfunktioniert nicht trap STRG + Z, wenn Sie STRG + Z drücken, Ihr Terminal - Emulator ein sendet ^ZZeichen (0x1a) an die Master - Seite des pty Gerät. Die Leitungsdisziplin des Pty-Treibers sendet dann SIGTSTP an die Vordergrundprozessgruppe des Terminals. Bis dahin bashist überhaupt nicht beteiligt. Das SIGTSTP kann der Prozess Gruppenleiter führen zu suspendieren und dann die , wait()die bashauf sie tut zurückkehren wird.
Stéphane Chazelas
5
Beachten Sie, dass es keine Garantie 19für die Anzahl der SIGTSTP gibt. Verwenden Sie kill -s TSTPoder kill -s STOP(TSTP kann abgefangen oder ignoriert werden, STOP kann nicht).
Stéphane Chazelas
2
@ nyuszika7h, $$kann nur gelesen werden, ist es aber IFSnicht. Versuchen Sie IFS=0123456789; suspendin kshzum Beispiel.
Stéphane Chazelas
3

Csh, bash, ksh, zsh haben einen suspendeingebauten 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 Shells suspendfunktioniert der Befehl auch, wenn die Shell TSTP derzeit ignoriert.

Sie können das Signal auch manuell mit an die Shell senden kill -STOP $$.

Gilles 'SO - hör auf böse zu sein'
quelle
0

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 wird X. 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.

Silicon Valley
quelle
Dies ist möglicherweise eher als Kommentar als als Antwort angebracht.
Barmar