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

해당 평행 파이프를 만들고 사용하는 올바른 방법은 무엇입니까?

("헤드"는 비용이 많이 드는 작업을 나타내고 교착 상태의 위험성을 알고 있다고 가정합니다.)

답변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"이 필요하고 "&3" 대신 "$pipe3"을 사용하면 좀 덜 우아해집니다.

관련 정보