Alterne para o shell pai sem fazer logout

29

Digamos que eu comece na minha conta local:

avindra@host:~>

então eu mudo para root:

host:~ #

Então eu mudo para o oracle:

[ oracle@host:~]

Existe uma maneira de retornar ao shell raiz (o pai), sem sair do shell do oracle?

Seria conveniente nesse caso, porque a conta do oracle não possui privilégios de sudo. Por exemplo, estou no diretório / some / really / profundamente / aninhado / no oracle e tenho todos os tipos de variáveis ​​de ambiente especiais configuradas. Mas preciso voltar à raiz para tocar em alguns arquivos do sistema.

Atualmente, eu deixava o shell do oracle para voltar ao root, executava meus comandos root e depois voltava para o Oracle. O inconveniente é que estou logado desde o início e perco meu diretório e ambiente de trabalho.

Dito isto, há alguma maneira de fazer o que estou pedindo?

Avindra Goolcharan
fonte
Se você estiver usando uma área de trabalho da GUI, basta abrir outra janela ou guia do terminal ou até mudar para outro console virtual. Caso contrário, use a tela conforme indicado em uma das respostas.
31414 Joe
Vou olhar para a tela, não a usei antes. Quanto às abas, prefiro usar uma aba como host. Acho que um fluxo de trabalho que envolve várias guias por host é complicado. Faço muito trabalho em hosts / sistemas distribuídos em cluster, portanto, mesmo ter uma guia por nó no cluster pode ficar confuso. Na minha opinião, uma guia = um host discreto.
Avindra Goolcharan

Respostas:

41

Você pode simular um CTRL-Z(que você normalmente usa para temporariamente um processo em segundo plano) usando o killcomando:

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

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

bashapenas prende a CTRL-Zcombinação de teclas. kill -19envia SIGSTPpara o processo que é efetivamente a mesma coisa.

Bratchley
fonte
1
Em zshvocê pode apenas correr suspend.
22914 Mikel
3
@Mikel, zshou csh, tcshou bash, ou o shell Bourne ou ksh... (em ksh, suspender é um alias para'kill -s STOP $$' (note o bug com as aspas faltando em torno $$)).
Stéphane Chazelas
2
bashfaz não armadilha CTRL-Z, quando você pressionar CTRL-Z, seu emulador de terminal envia um ^Zcaractere (0x1a) para o lado do mestre do dispositivo pty. A disciplina de linha do driver pty envia o SIGTSTP ao grupo de processos em primeiro plano do terminal. Até então, bashnão está envolvido. Esse SIGTSTP pode causar a suspensão do líder do grupo de processos e, em seguida, o wait()que bashocorre nele retornará.
Stéphane Chazelas
5
Observe que não há garantia de que 19será o número de SIGTSTP. Use kill -s TSTPou kill -s STOP(TSTP pode ser interceptado ou ignorado, STOP não pode).
Stéphane Chazelas
2
@ nyuszika7h, $$pode ser somente leitura, mas IFSnão é. Experimente IFS=0123456789; suspend, kshpor exemplo.
Stéphane Chazelas
3

Csh, bash, ksh, zsh, tem um suspendcomando interno (ou alias, em ksh) que faz exatamente isso. Este comando é basicamente equivalente ao envio de um sinal TSTP para o shell; O bash e o zsh fazem um pouco de manipulador de sinal adicional e malabarismo, e nesses shells o suspendcomando funciona mesmo que o shell esteja atualmente ignorando o TSTP.

Você também pode enviar o sinal para o shell manualmente com kill -STOP $$.

Gilles 'SO- parar de ser mau'
fonte
0

Eu também sugeriria que você pudesse usar (instalar, se necessário) um programa chamado [screen][1]que permite abrir várias janelas de terminal. Foi projetado para TTYS, para que funcione perfeitamente, sem necessidade X. Você pode usar atalhos de teclado para alternar entre terminais e desconectar e sair, deixando os terminais ainda em execução, depois faça login novamente e reconecte-se a eles.

Acredito que a maioria das distribuições Linux tem pacotes para este programa e usei pacotes no Solaris para ele. O pior caso, é claro, é que você pode instalar a partir da fonte.

Vale do Silício
fonte
Isso pode ser mais apropriado como um comentário do que como uma resposta.
Barmar