Как ожидать в bash-скрипте нескольких подпроцессов, порожденных этим скриптом, чтобы завершить работу и вернуть код завершения! = 0, когда любой из подпроцессов заканчивается кодом! = 0?
Простой скрипт:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
Приведенный выше скрипт будет ожидать всех 10 порожденных подпроцессов, но он всегда будет иметь статус выхода 0 (см. help wait
). Как я могу изменить этот скрипт, чтобы он обнаруживал состояния выхода порожденных подпроцессов и возвращал код выхода 1, когда любой из подпроцессов заканчивался кодом! = 0?
Есть ли лучшее решение для этого, чем сбор PID подпроцессов, ожидание их в порядке и суммирование состояний выхода?
wait -n
есть одна небольшая проблема: если не осталось дочерних заданий (так называемое состояние гонки), он возвращает ненулевое состояние завершения (сбой), которое может быть неотличимо от сбойного дочернего процесса.
wait -n
, доступно в современном bash для возврата только после завершения первой / следующей команды.