Em bash
, você não pode esperar pela substituição do processo. Em:
cmd1 > >(cmd2)
o comando inteiro termina assim que cmd1
terminar, independentemente do status de cmd2
.
Você precisa implementar um mecanismo para sinalizar o processo pai que o cmd2
finalizou. Um jeito fácil, usando um fifo:
#!/usr/bin/env bash
trap 'rm wait.fifo' EXIT
mkfifo wait.fifo
echo 'hello' | tee \
>( sleep 3; cat /dev/stdin; : >wait.fifo ) \
>( sleep 2; cat /dev/stdin; : >wait.fifo ) \
>( sleep 1; cat /dev/stdin; : >wait.fifo )
for (( i=0;i<3;i++ )); do read <wait.fifo; done