Isso não funciona:
$ head file | tee >(sort >&3) | paste <(cat <&3) -
bash: 3: Bad file descriptor
mas espero que seja óbvio o que se pretende fazer, o equivalente a:
$ head file | sort >temp1
$ head file >temp2
$ paste temp1 temp2
Qual é a maneira correta de criar e usar esse tubo paralelo?
(Suponha que "cabeça" represente uma operação cara e estou ciente dos perigos do impasse.)
Responder1
Descobri que criar explicitamente outro canal primeiro faz o que eu queria fazer:
$ pipe3="$$.pipe3"
$ mkfifo $pipe3
...
$ head file_1 | tee >(sort >$pipe3) | (sleep 1; paste <(cat <$pipe3) - )
...
$ tail file_2 | tee >(sort -r >$pipe3) | (sleep 1; paste <(cat <$pipe3) - )
...
$ rm $pipe3
A necessidade de "sleep" e o uso de "$pipe3" em vez de "&3" tornam-no um pouco menos elegante.