Questão Como suspender bash dentro do bash


É possível suspender um bash que foi invocado por outra bash? Por exemplo, se eu usar su para se tornar um usuário diferente, mas quer voltar para o meu próprio usuário por um momento. Por outro exemplo, em uma sessão SSH, posso usar o atalho ~ (~, ^ Z) para suspender o shell remoto e retornar ao meu shell local (mas isso é obviamente um recurso SSH, não o shell).

bash intercepta ^ Z para fazer seu próprio controle de processo, então deve ser um comando separado (se é suportado). Mas tentar encontrá-lo só resulta em informações sobre o controle normal do processo.


4


origem




Respostas:


Bash tem um suspend construídas em:

suspend: suspend [-f]
    Suspend shell execution.

    Suspend the execution of this shell until it receives a SIGCONT signal.
    Unless forced, login shells cannot be suspended.

    Options:
      -f    force the suspend, even if the shell is a login shell

    Exit Status:
    Returns success unless job control is not enabled or an error occurs.

5



Ahha! Isso é o que eu estava procurando. - Brian


Experimente com:

kill -STOP $$

Onde $$ é o PID do shell atual.

Você pode ligá-lo a Alt + z por exemplo, adicionando a ~/.inputrc:

"\ez": "kill -STOP $$\n"

5



Excelente, obrigado! Nunca soube sobre .inputrc - Brian
Controla o caminho bash lê / edita a entrada do usuário, veja man readline, pode ser muito útil, vale a pena mencionar os comandos: history-search-backward e history-search-backward. - cYrus


Não é exatamente o que você estava pedindo, mas eu normalmente uso tela quando estou fazendo coisas assim. No entanto, a tela não é instalada por padrão em todos os sistemas.


1



Eu realmente trabalho na tela o tempo todo. Eu corro tela na minha máquina local e tenho sessões SSH em um monte de outras. Portanto, normalmente, não executo a tela nos sistemas remotos porque a tela dentro da tela é desajeitada. E eu estou com preguiça de abrir outra sessão :-). Eu estou acostumado a apertar ^ Z no vim para suspendê-lo quando eu precisar executar alguns comandos (eu sei que o vim tem! Mas não é o mesmo que um shell). - Brian