Comandos de fila enquanto um comando está sendo executado

2

Suponha que você execute um comando que leve algum tempo para retornar e queira executar um comando diferente depois de executado, mas você não planejou isso antes.

Eu sei que existe a opção de pressionar Ctrl + Z e, em seguida, enviar fg && otherCommand . No entanto, isso tem duas falhas principais:

  1. Não funciona se o primeiro comando for uma composição de comandos diferentes ( command1 && command2 ou command1; command2 ), porque os comandos subsequentes da primeira linha enviada não serão executados.
  2. A execução do primeiro comando é interrompida enquanto você insere o próximo comando. Com esses desagradáveis comandos de 30 segundos, o tempo que você gasta inserindo o próximo comando compõe uma boa parte do tempo restante de execução, se não todo.

Eu também sei que você pode simplesmente digitar o próximo comando enquanto um comando está sendo executado e, em seguida, pressionar Enter para fazer o sumbit. No entanto, isso também tem duas falhas principais:

  1. Ele não funciona se o comando executado for lido pela primeira vez em stdin .
  2. Se o comando que você executar primeiro produzir a saída, não será possível ver o que você digitou.

Existe uma maneira rápida de enfileirar mais comandos enquanto um comando está sendo executado, possivelmente envolvendo o uso de um emulador de terminal especial ou vários terminais?

    
por UTF-8 30.04.2017 / 11:18

3 respostas

1

Pressione Ctrl + Z e execute imediatamente bg . Isso faz com que o comando atual continue sendo executado em segundo plano. Então você pode usar fg && otherCommand para agendar otherCommand após o atual.

Para tornar isso mais fácil, eu configurei Ctrl + Z no meu shell para executar bg quando eu pressioná-lo em uma linha de comando vazia. Consulte Em zsh, Como posso deserdar mais rapidamente o processo em primeiro plano? e Como você envia aplicativos de linha de comando diretamente para o fundo? ; Eu não verifiquei se as versões modernas do bash facilitam fazer o mesmo.

    
por 01.05.2017 / 00:52
0

Você provavelmente deseja:

wait $pid

Se você não estiver executando no mesmo shell, não será possível usar um recurso interno e precisará de uma solução alternativa. Veja a discussão aqui .

    
por 30.04.2017 / 17:24
0

Assumindo a premissa de que você não pode abrir um segundo terminal / conexão, você pode executar sua sessão em um multiplexador de terminal, como screen ou tmux .

Depois, você pode facilmente abrir outra sessão a qualquer momento para fazer mais enquanto aguarda a conclusão de um comando na sessão atual.

Isso também tem o benefício de manter as sessões ativas, caso a conexão / emulador seja interrompida por qualquer motivo.

    
por 30.04.2017 / 17:33