5

を使用したプロセス置換について知り>()、非常に興奮していますが、試してみると、常に機能するとは限りません。例えば

これは機能します:

cat /usr/share/dict/words |tee >(tail -1) > /dev/null
ZZZ

そして、これは壊れたパイプエラーを与えます:

cat /usr/share/dict/words |tee >(head -1) > /dev/null
1080
tee: /dev/fd/63: Broken pipe

理由はありますか?ありがとう!

更新: これは RHEL 4 および RHEL 6.2 にあります。

4

1 に答える 1

1

head ではエラーが発生するが、tail ではエラーが発生しない理由の説明を次に示します。

head -1 は、その入力の 1 行を読み取るだけで済みます。その後、終了し、ティーはその出力を...に送り続けます...

一方、tail -1 はジョブを完了するために完全な入力を読み取る必要があるため、tee が終了する前にパイプを終了することはありません。

壊れたパイプのメッセージは無視しても問題ありません。また、多くのプログラムがそのようなエラーを報告しなくなりました。私のマシンでは表示されません。

于 2013-05-18T20:34:14.280 に答える