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 -1 只需读取其输入的一行。然后它将退出,并且三通继续将其输出输入...

另一方面,tail -1 必须读取完整的输入才能完成其工作,因此它永远不会在 tee 完成之前终止管道。

您可以放心地忽略损坏的管道消息,并且许多程序停止报告此类错误。在我的机器上我看不到它。

于 2013-05-18T20:34:14.280 回答