Як чекати в скрипті 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, щоб повернутися лише тоді, коли виконується перша / наступна команда.