Algo parecido com isto:
(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait
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
Algo parecido com isto:
(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait
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.
Tags bash shell-script exit parallelism