Имитировать флаг команды ожидания-n в zsh

#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…..