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

ただし、「&3」ではなく「$ pipe3」を使用して「スリープ」する必要があるため、少しエレガントではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.