Estou procurando algo como command1 ; command2
ou seja, como correr command2
atrás command1
, mas gostaria de planejar a execução de command2
quando command1
já está em execução.
Isso pode ser resolvido apenas digitando o command2
e confirmando por Enter suposto que o command1
não está consumindo entrada padrão e que command1
não produz muito texto na saída, tornando impraticável digitar (caracteres digitados são misturados com a command1
saída).
Geralmente o que eu faço é: Ctrl+Z
fg && command2
bg
, para retomar o comando1 em segundo plano enquanto você digita o comando2.fg && command2
para retomar o comando1 em primeiro plano e enfileirar o comando2 posteriormente se o comando1 for bem-sucedido. Você pode, claro, substituir;
ou||
pelo&&
se desejar.iniciar um comando
pausar a execução pressionando Ctrl+Z
encontre o número do trabalho do comando pausado (geralmente já está impresso no console quando consolar quando o comando for pausado) executando
vamos
command1
continuar em segundo planoexecução do plano de
command2
aguardar o término decommand1
Controle de Trabalho de Documentação Integrado
Existem várias alternativas.
Com um e comercial , 'push to background', o segundo programa é iniciado após o início do primeiro, mas eles provavelmente serão executados lado a lado.
Com dois e comercial , 'lógico e', o segundo programa será iniciado somente se o primeiro programa for concluído com êxito.
Com um ponto e vírgula separando os comandos na linha de comando, o segundo programa será iniciado, quando o primeiro programa terminar, mesmo que tenha falhado ou sido interrompido.
Você pode
wait <PID>
esperar que o primeiro comando termine, se ele já estiver sendo executado no mesmo shell (na mesma janela do terminal).Caso contrário, se o primeiro comando já estiver sendo executado em outro shell (em outra janela), você poderá usar um pequeno loop while usando ps para verificar se o PID ainda é encontrado por
ps
. Quando não for mais encontrado, o segundo comando será iniciado.Este exemplo de demonstração para
bash
verificar setop
está sendo executado via PID e executa o comandose/quando
top
não estiver mais em execução.A maneira padrão é apenas deixar o comando 1 iniciar em segundo plano e, em seguida, fazer o comando 2 iniciar em segundo plano ou em primeiro plano. O comando completo é este:
&
não é um conector entre esses dois comandos. Ele pode ser usadocommand1
sozinho para iniciar em segundo plano:E esta é a sintaxe certa para iniciar os dois comandos em segundo plano:
Se você tiver a opção de usar dois terminais, veja o que você pode fazer:
ps -ef | grep <command1>
(você pode querer formar corretamente a string de filtro no comando grep para que você não encontre acidentalmente outro processo tendo como substring).wait <command1_pid> ; command2
Basicamente,
wait
é um comando interno do bash que espera até que os PIDs fornecidos saiam e depois retornem. Você está simplesmente delegando sua espera pelo término do comando1 para owait
comando do bash.