如何在 bash 中重定向並行管道?

如何在 bash 中重定向並行管道?

這不起作用:

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

但我希望它的目的很明顯,相當於:

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

創建和使用平行管道的正確方法是什麼?

(假設“head”代表一個昂貴的操作,並且我意識到死鎖的危險。)

答案1

我發現首先明確地創建另一個管道可以實現我想做的事情:

$ 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

但需要“睡眠”,並使用“$pipe3”而不是“&3”,這使得它有點不太優雅。

相關內容