Cambiar a shell principal sin cerrar sesión

29

Digamos que comienzo en mi cuenta local:

avindra@host:~>

luego cambio a root:

host:~ #

Luego cambio al oráculo:

[ oracle@host:~]

¿Hay alguna manera de que regrese al shell raíz (el padre), sin cerrar sesión en el shell oráculo?

Sería conveniente en este caso, porque la cuenta de Oracle no tiene privilegios de sudo. Entonces, por ejemplo, estoy en el directorio / some / really / deeply / nested / en Oracle, y tengo todo tipo de variables de entorno especiales configuradas. Pero necesito volver a la raíz para tocar algunos archivos del sistema.

Actualmente, me retiraría del shell de Oracle para volver a la raíz, ejecutar mis comandos raíz y luego volver a Oracle. El inconveniente es que he iniciado sesión desde un nuevo comienzo y pierdo mi directorio y entorno de trabajo.

Dicho esto, ¿hay alguna manera de hacer lo que te pido?

Avindra Goolcharan
fuente
Si está utilizando un escritorio GUI, puede abrir otra ventana o pestaña de terminal o incluso cambiar a otra consola virtual. Si no, use la pantalla como se indica en una de las respuestas.
Joe
Lo miraré en la pantalla, no lo he usado antes. En cuanto a las pestañas, prefiero usar una pestaña para el host. Encuentro que un flujo de trabajo que implica múltiples pestañas por host es engorroso. Trabajo mucho en hosts agrupados / sistemas distribuidos, por lo que incluso tener una pestaña por nodo en el clúster puede ser confuso. En mi opinión, una pestaña = un host discreto.
Avindra Goolcharan

Respuestas:

41

Puede simular un CTRL-Z(que normalmente usa para poner en segundo plano temporalmente un proceso) usando el killcomando:

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

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

bashsolo atrapa la CTRL-Zcombinación de teclas. kill -19envía SIGSTPal proceso que efectivamente es lo mismo.

Bratchley
fuente
1
En zshpuedes simplemente correr suspend.
Mikel
3
@Mikel, zsho csh, tcsho bash, o el shell Bourne o ksh... (en ksh, suspender es un alias para'kill -s STOP $$' (tenga en cuenta el error con las comillas faltantes alrededor de $$)).
Stéphane Chazelas
2
bashhace no trampa CTRL-Z, al presionar CTRL-Z, el emulador de terminal envía un ^Zcarácter (0x1a) en el lado de transporte del dispositivo Pty. La disciplina de línea del controlador pty luego envía SIGTSTP al grupo de procesos en primer plano del terminal. Hasta entonces bashno está involucrado en absoluto. Ese SIGTSTP puede hacer que el líder del grupo de procesos se suspenda y luego lo wait()que bashsucede en él volverá.
Stéphane Chazelas
55
Tenga en cuenta que no hay garantía de que 19será el número de SIGTSTP. Use kill -s TSTPo kill -s STOP(TSTP puede ser atrapado o ignorado, STOP no puede).
Stéphane Chazelas
2
@ nyuszika7h, $$puede ser de solo lectura, pero IFSno lo es. Trate IFS=0123456789; suspendde kshpor ejemplo.
Stéphane Chazelas
3

Csh, bash, ksh, zsh, tienen un suspendcomando incorporado (o alias, en ksh) que hace exactamente eso. Este comando es principalmente equivalente a enviar una señal TSTP al shell; bash y zsh hacen un poco de manejador de señal adicional y hacen malabarismos, y en estos shells el suspendcomando funciona incluso si el shell actualmente ignora TSTP.

También puede enviar la señal al shell manualmente con kill -STOP $$.

Gilles 'SO- deja de ser malvado'
fuente
0

También sugeriría que podría usar (instalar si es necesario) un programa llamado [screen][1]que le permite tener múltiples ventanas de terminal abiertas. Fue diseñado para TTYS, por lo que funciona bien sin necesidad X. Puede usar métodos abreviados de teclado para cambiar entre terminales y desconectar y cerrar sesión, dejando sus terminales aún en funcionamiento, luego vuelva a iniciar sesión y vuelva a conectarse a ellas.

Creo que la mayoría de las distribuciones de Linux tienen paquetes para este programa, y ​​he usado paquetes en Solaris para ello. El peor de los casos, por supuesto, es que puede instalar desde la fuente.

Silicon Valley
fuente
Esto podría ser más apropiado como un comentario en lugar de una respuesta.
Barmar