Passer au shell parent sans se déconnecter

29

Disons que je commence dans mon compte local:

avindra@host:~>

puis je passe en root:

host:~ #

Ensuite, je passe à l'oracle:

[ oracle@host:~]

Existe-t-il un moyen pour moi de revenir dans le shell racine (le parent), sans vous déconnecter du shell Oracle?

Ce serait pratique dans ce cas, car le compte Oracle n'a pas de privilèges sudo. Ainsi, par exemple, je suis dans le répertoire / some / really / deep / nested / dans oracle, et j'ai toutes sortes de variables d'environnement spéciales configurées. Mais je dois revenir à la racine pour toucher certains fichiers système.

Actuellement, je quitterais le shell Oracle pour revenir à la racine, exécuter mes commandes root, puis revenir à Oracle. L'inconvénient est que je suis connecté depuis un nouveau départ et que je perds mon répertoire de travail et mon environnement.

Cela étant dit, y a-t-il un moyen de faire ce que je demande?

Avindra Goolcharan
la source
Si vous utilisez un bureau gui, vous pouvez simplement ouvrir une autre fenêtre ou un onglet de terminal ou même basculer vers une autre console virtuelle. Sinon, utilisez l'écran comme indiqué dans l'une des réponses.
Joe
Je vais regarder l'écran, je ne l'ai pas utilisé auparavant. Quant aux onglets, je préfère utiliser un onglet pour l'hôte. Je trouve qu'un flux de travail qui implique plusieurs onglets par hôte est lourd. Je fais beaucoup de travail dans des hôtes en cluster / systèmes distribués, donc même avoir un onglet par nœud dans le cluster peut être déroutant. Dans mon esprit, un onglet = un hôte discret.
Avindra Goolcharan

Réponses:

41

Vous pouvez simuler un CTRL-Z(que vous utilisez normalement pour mettre temporairement un processus en arrière-plan) à l'aide de la killcommande:

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

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

bashpiège simplement la CTRL-Zcombinaison de touches. kill -19envoie SIGSTPau processus qui est effectivement la même chose.

Bratchley
la source
1
En zshvous pouvez simplement courir suspend.
Mikel
3
@Mikel, zshou csh, tcshou bash, ou le shell Bourne ou ksh... (en ksh, suspension est un alias pour'kill -s STOP $$' (notez le bug avec les guillemets manquants dans $$)).
Stéphane Chazelas
2
bashne piège pas CTRL-Z, lorsque vous appuyez sur CTRL-Z, votre émulateur de terminal envoie un ^Zcaractère (0x1a) au côté maître du périphérique pty. La discipline de ligne du pilote pty envoie ensuite SIGTSTP au groupe de processus de premier plan du terminal. Jusque-là bashn'est pas impliqué du tout. Ce SIGTSTP peut provoquer le chef de groupe de processus de suspension et ensuite le wait()qui bashfait sur elle retournera.
Stéphane Chazelas
5
Notez qu'il n'y a aucune garantie qui 19sera le nombre de SIGTSTP. Utilisez kill -s TSTPou kill -s STOP(TSTP peut être piégé ou ignoré, STOP ne peut pas).
Stéphane Chazelas
2
@ nyuszika7h, $$peut être en lecture seule, mais IFSne l'est pas. Essayez IFS=0123456789; suspenddans kshpar exemple.
Stéphane Chazelas
3

Csh, bash, ksh, zsh, ont une suspendcommande intégrée (ou alias, en ksh) qui fait exactement cela. Cette commande équivaut principalement à envoyer un signal TSTP au shell; bash et zsh font un peu de gestion de signal et de jonglage supplémentaires, et dans ces shells, la suspendcommande fonctionne même si le shell ignore actuellement TSTP.

Vous pouvez également envoyer le signal au shell manuellement avec kill -STOP $$.

Gilles 'SO- arrête d'être méchant'
la source
0

Je suggère également que vous puissiez utiliser (installer si nécessaire) un programme appelé [screen][1]qui vous permet d'ouvrir plusieurs fenêtres de terminal. Il a été conçu pour TTYS donc il fonctionne très bien sans avoir besoin X. Vous pouvez utiliser des raccourcis clavier pour basculer entre les terminaux et vous déconnecter et vous déconnecter, en laissant vos terminaux toujours en fonction, puis reconnectez-vous et reconnectez-les.

Je crois que la plupart des distributions Linux ont des packages pour ce programme, et j'ai utilisé des packages sur Solaris pour cela. Le pire des cas est bien sûr que vous pouvez installer à partir de la source.

SiliconValley
la source
Cela pourrait être plus approprié comme commentaire plutôt que comme réponse.
Barmar