Jak czekać w skrypcie bash na kilka podprocesów odrodzonych z tego skryptu, aby zakończyć i zwrócić kod zakończenia! = 0, gdy którykolwiek z podprocesów kończy się kodem! = 0?
Prosty skrypt:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Powyższy skrypt będzie czekał na wszystkie 10 odrodzonych podprocesów, ale zawsze da status wyjścia 0 (patrz help wait
). Jak mogę zmodyfikować ten skrypt, aby wykrył status wyjścia spawnowanych podprocesów i zwrócił kod wyjścia 1, gdy którykolwiek z podprocesów zakończy się kodem! = 0?
Czy istnieje na to lepsze rozwiązanie niż zbieranie PID podprocesów, czekanie na nie w kolejności i sumowanie stanów wyjścia?
wait -n
ma jeden mały problem: jeśli nie ma już zadań potomnych (inaczej warunek wyścigu), zwraca niezerowy status wyjścia (niepowodzenie), który może być nie do odróżnienia od nieudanego procesu potomnego.
wait -n
, dostępne w nowoczesnym bashu, aby powrócić dopiero po zakończeniu pierwszego / następnego polecenia.