Come attendere in uno script bash diversi sottoprocessi generati da quello script per terminare e restituire il codice di uscita! = 0 quando uno dei sottoprocessi termina con il codice! = 0?
Script semplice:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Lo script sopra attenderà tutti i 10 sottoprocessi generati, ma fornirà sempre lo stato di uscita 0 (vedere help wait
). Come posso modificare questo script in modo che possa scoprire gli stati di uscita dei sottoprocessi generati e restituire il codice di uscita 1 quando uno dei sottoprocessi termina con il codice! = 0?
Esiste una soluzione migliore per quella che raccogliere i PID dei sottoprocessi, aspettarli in ordine e sommare gli stati di uscita?
wait -n
ha un piccolo problema: se non rimangono lavori secondari (ovvero condizioni di gara), restituisce uno stato di uscita diverso da zero (errore) che può essere indistinguibile da un processo figlio non riuscito.
wait -n
, disponibile in bash moderno per tornare solo quando il comando primo / successivo viene completato.