Как перенаправить параллельные трубы в Bash?

0

Это не работает:

   $ head file | tee >(sort >&3) | paste <(cat <&3) -
   bash: 3: Bad file descriptor

но я надеюсь, что очевидно, что он должен делать, эквивалент:

   $ head file | sort >temp1
   $ head file >temp2
   $ paste temp1 temp2

Как правильно создать и использовать эту параллельную трубу?

(Предположим, «голова» представляет собой дорогостоящую операцию, и я знаю об опасностях тупика.)

луч
источник

Ответы:

0

Я обнаружил, что явное создание другого канала сначала делает то, что я хотел сделать:

$ 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

Потребность в "sleep" и использование "$ pipe3" вместо "& 3" делает его немного менее элегантным.

луч
источник