2013-04-01 46 views
4

我剛剛發現了關於用>()進行的工藝替換,我對此感到非常興奮,但是當我嘗試它時,它並不總是奏效。例如用工藝替代方法將三通管破裂

這工作:

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

+0

FWIW,這兩個工作對我來說沒有錯誤(測試OS X和類似Fedora的Linux發行版)。 – danfuzz

+0

嘗試將'-i'傳遞給'tee':'cat/usr/share/dict/words |/dev/null tee:/ dev/null# – jedwards

+0

同樣用-i:cat/usr/share/dict/words | tee -i>(head -1)/dev/fd/63:在我的OS X上,損壞的管道 – naumcho

回答

1

這裏就是爲什麼你得到頭錯誤的解釋,但不是尾:

頭-1只需要讀取其輸入的一行。那麼它將退出並且三通繼續將其輸出饋送到...

另一方面,尾部-1必須讀取完整的輸入才能完成其作業,因此在完成三通之前它不會終止管道。

您可以安全地忽略損壞的管道消息,並且許多程序停止報告此類錯誤。在我的機器上我沒有看到它。