Como posso executar dois comandos em paralelo e terminá-los se um deles terminar com o código de saída 0?

5

Eu tenho 2 comandos que devem ser executados simultaneamente. E eu quero que o script termine se um deles sair com o código 0 ou 1. Como posso conseguir isso no Linux (Ubuntu)

cmd1 &
cmd2 &
wait
    
por Sam 10.01.2017 / 21:33

2 respostas

6

Algo parecido com isto:

(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait
    
por 10.01.2017 / 23:05
2

Com bash 4.4 e mais recente:

cmd1 & p1=$!
cmd2 & p2=$!

wait -n
[ "$?" -gt 1 ] || kill "$p1" "$p2"
wait

wait -n aguarda a conclusão da primeira tarefa em segundo plano e informa seu status de saída em $? .

Supondo que você queira matar o outro trabalho quando o primeiro sair com 0 ou 1. Altere o comando kill para exit se quiser sair do script e deixar o outro comando em execução sem uso.

    
por 11.01.2017 / 01:13