Bash не позволяет вам фиксировать вывод чего-либо в фоновом режиме.
$ unset var; var=$(sh -c 'sleep 5; echo foo; exit 42')
$ echo $? $var
42 foo
$ unset var; var=$(sh -c 'sleep 5; echo foo; exit 42') & wait
[1] 30250
[1]+ Exit 42 var=$(sh -c 'sleep 5; echo foo; exit 42')
$ echo $? $var
0
Существует wait -n
, который возвращается, когда какой-то фоновый процесс завершился, и завершается со статусом завершения этого процесса. Поскольку вы знаете, сколько у вас фоновых процессов, вы можете ждать -n
столько раз. Уродливо, но ...
while true
do
curl someurl1 > file1 &
curl someurl2 > file2 &
curl someurl3 > file3 &
for i in 1 2 3; do
wait -n || { echo some curl failed; continue 2; }
done
dosomething "$(< file1)" &
dosomething "$(< file2)" &
dosomething "$(< file3)" &
for i in 1 2 3; do
wait -n || { echo some dosomething failed; continue 2; }
done
break
done