#zsh #wait
Вопрос:
Я создаю два задания оболочки следующим образом
sleep 5 amp;
completion_pid=$!
sleep 40 amp;amp; exit 1 amp;
failure_pid=$!
В bash
я могу получить код завершения первого задания для завершения, используя -n
флаг wait
команды ‘s
# capture exit code of the first subprocess to exit
wait -n $completion_pid $failure_pid
Однако кажется, что этот флаг недоступен в версии моего macOS Big Sur wait
(вероятно, потому, что я использую zsh
— ? )
▶ wait -n
wait: job not found: -n
Существуют ли какие-либо альтернативные инструменты для этого, которые также доступны на MacOS
?
Что, возможно, странно, так это то, что я получаю ту же ошибку при вызове скрипта, содержащего wait -n
as bash myscript.sh
…
Комментарии:
1.
wait -n
было относительно новым дополнением кbash
(введено в 4.3). Вы используете более старую версиюbash
? (И что касается вашего первоначального вопроса, я не знаю ни одного простого способа имитацииwait -n
zsh
.)2. спасибо, вы были правы насчет
bash
версии; обновление ее позволяет мне, по крайней мере, запускать мой скрипт сbash
помощью интерпретатора
Ответ №1:
Поскольку вы ждете, указав PID, вы можете просто выполнить
wait $completion_pid $failure_pid
Комментарии:
1. Это подождет, пока не завершится даже последнее задание из двух; я думаю
-n
, что подождет, пока не завершится первое2. Действительно, вы правы. Я не узнал этого с первого прочтения справочной страницы bash…..