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?
Respostas:
Você pode simular um
CTRL-Z
(que você normalmente usa para temporariamente um processo em segundo plano) usando okill
comando:bash
apenas prende aCTRL-Z
combinação de teclas.kill -19
enviaSIGSTP
para o processo que é efetivamente a mesma coisa.fonte
zsh
você pode apenas corrersuspend
.zsh
oucsh
,tcsh
oubash
, ou o shell Bourne ouksh
... (emksh
, suspender é um alias para'kill -s STOP $$'
(note o bug com as aspas faltando em torno $$)).bash
faz não armadilha CTRL-Z, quando você pressionar CTRL-Z, seu emulador de terminal envia um^Z
caractere (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,bash
não está envolvido. Esse SIGTSTP pode causar a suspensão do líder do grupo de processos e, em seguida, owait()
quebash
ocorre nele retornará.19
será o número de SIGTSTP. Usekill -s TSTP
oukill -s STOP
(TSTP pode ser interceptado ou ignorado, STOP não pode).$$
pode ser somente leitura, masIFS
não é. ExperimenteIFS=0123456789; suspend
,ksh
por exemplo.Csh, bash, ksh, zsh, tem um
suspend
comando 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 osuspend
comando funciona mesmo que o shell esteja atualmente ignorando o TSTP.Você também pode enviar o sinal para o shell manualmente com
kill -STOP $$
.fonte
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 necessidadeX
. 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.
fonte