这不起作用:
$ 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
但是,需要“sleep”并且使用“$pipe3”而不是“&3”,这使得它不那么优雅。