Passa alla shell padre senza disconnettersi


29

Diciamo che inizio nel mio account locale:

avindra@host:~>

quindi passo a root:

host:~ #

Quindi passo all'oracolo:

[ oracle@host:~]

Esiste un modo per tornare alla shell di root (il genitore), senza disconnettersi dalla shell di Oracle?

In questo caso sarebbe conveniente, perché l'account Oracle non ha privilegi sudo. Quindi, per esempio, sono nella directory / some / really / deep / nested / in Oracle e ho impostato tutti i tipi di variabili d'ambiente speciali. Ma devo tornare alla radice per toccare alcuni file di sistema.

Al momento, vorrei uscire dalla shell di Oracle per tornare alla radice, eseguire i miei comandi di root, quindi tornare a Oracle. L'inconveniente è che ho effettuato l'accesso da un nuovo inizio e perdo la mia directory di lavoro e l'ambiente.

Detto questo, c'è un modo per fare ciò che sto chiedendo?


Se stai utilizzando un desktop GUI, puoi semplicemente aprire un'altra finestra o scheda del terminale o persino passare a un'altra console virtuale. In caso contrario, utilizzare lo schermo come indicato in una delle risposte.
Joe,

Guarderò sullo schermo, non l'ho mai usato prima. Per quanto riguarda le schede, preferisco usare una scheda per l'host. Trovo ingombrante un flusso di lavoro che comporta più schede per host. Lavoro molto su host / sistemi distribuiti in cluster, quindi anche avere una scheda per nodo nel cluster può creare confusione. Nella mia mente, una scheda = un host discreto.
Avindra Goolcharan,

Risposte:


41

È possibile simulare un CTRL-Z(che normalmente si utilizza per mettere in background temporaneamente un processo) usando il killcomando:

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

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

bashintrappola la CTRL-Zcombinazione di tasti. kill -19invia SIGSTPal processo che è effettivamente la stessa cosa.


1
In zshte puoi semplicemente correre suspend.
Mikel,

3
@Mikel, zsho csh, tcsho bash, o la shell Bourne o ksh... (a ksh, la sospensione è un alias per'kill -s STOP $$' (notare il bug con le quotazioni mancanti intorno $$)).
Stéphane Chazelas,

2
bashfa non trappola CTRL-Z, quando si preme CTRL-Z, l'emulatore terminale invia un ^Zcarattere (0x1a) al lato master del dispositivo PTY. La disciplina di linea del driver pty invia quindi SIGTSTP al gruppo di processi in primo piano del terminale. Fino ad allora bashnon è coinvolto affatto. Che SIGTSTP può causare il leader del gruppo di processi di sospendere e poi il wait()che bashfa su di esso tornerà.
Stéphane Chazelas,

5
Si noti che non esiste alcuna garanzia che 19sarà il numero di SIGTSTP. Utilizzare kill -s TSTPo kill -s STOP(TSTP può essere intrappolato o ignorato, STOP non può).
Stéphane Chazelas,

2
@ nyuszika7h, $$può essere di sola lettura, ma IFSnon lo è. Prova IFS=0123456789; suspendin kshper esempio.
Stéphane Chazelas,

3

Csh, bash, ksh, zsh, hanno un suspendcomando incorporato (o alias, in ksh) che fa esattamente questo. Questo comando equivale principalmente all'invio di un segnale TSTP alla shell; bash e zsh eseguono un po 'di manipolazione e manipolazione del segnale aggiuntivi e in queste shell il suspendcomando funziona anche se la shell sta attualmente ignorando TSTP.

È inoltre possibile inviare manualmente il segnale alla shell con kill -STOP $$.


0

Vorrei anche suggerire che è possibile utilizzare (installare se necessario) un programma chiamato [screen][1]che consente di aprire più finestre del terminale. È stato progettato per TTYS, quindi funziona perfettamente senza bisogno X. È possibile utilizzare le scorciatoie da tastiera per passare da un terminale all'altro e disconnettersi e disconnettersi, lasciando i terminali ancora in esecuzione, quindi accedere nuovamente e riconnettersi ad essi.

Credo che la maggior parte delle distribuzioni Linux disponga di pacchetti per questo programma e per questo ho usato pacchetti su Solaris. Il peggior caso ovviamente è che puoi installarlo dal sorgente.


Questo potrebbe essere più appropriato come commento piuttosto che come risposta.
Barmar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.