Aguardar programa de maneira limpa (por exemplo, em uma janela de terminal diferente)

1

Se você quiser executar um comando e depois outro após o primeiro terminar, você pode executar

command1 &

que imprime o PID do processo executando command1 .

Você pode pensar no que deseja fazer depois que command1 terminar e executar:

wait [PID printed by the previous command] && command2

No entanto, isso só funciona na mesma janela de terminal e fica realmente confuso se command1 imprimir a saída. Se você abrir uma nova janela de terminal e tentar esperar, será mostrado algo assim:

$ wait 10668
bash: wait: pid 10668 is not a child of this shell

Existe um emulador de terminal que suporta a espera de programas sem ter que escrever o próximo comando na saída do comando atualmente em execução sem lançar a saída do primeiro comando (como piping em /dev/null )?

Ele não precisa funcionar via wait ou algo semelhante. Clicar com o botão direito do mouse e escolher "executar após o comando atual retornado" seria perfeito.

Eu não quero dizer simplesmente concatenar comandos, mas ser capaz de executar um comando e então decidir o que deve ser executado logo após o término.

    
por UTF-8 10.04.2016 / 18:19

2 respostas

2

Muitas vezes, tendo dado um comando de longa execução, quando você quer preparar o próximo comando para ser executado posteriormente, use o controle de tarefa do shell para obtê-lo. Por exemplo, você deu command1 , não com & , e então você quer dar command2 , então você suspende o comando corrente rodando digitando control-z . Agora você tem o prompt do shell novamente, então você digita

fg; command2

e o fg retomará seu primeiro comando, e quando terminar o shell iniciará seu segundo comando.

Se você iniciou o comando 1 com & , ele está em segundo plano. Você pode trazê-lo para o primeiro plano com fg , depois suspendê-lo e assim por diante.

    
por 10.04.2016 / 18:50
1

Se você quiser apenas executar comandos assim que o anterior estiver concluído, separe-os com ; desta forma:

command1 ; command2

Ou, se você quiser apenas executar o segundo comando se o primeiro comando retornar true , desta forma:

command1 && command2
    
por 10.04.2016 / 20:54