我刚刚发现了使用>()
进行过程替换的过程,并对此非常兴奋,但是当我尝试它时,它并不总是有效。例如
这有效:
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 :(得分:1)
这里有一个解释为什么你得到头部错误而不是尾部错误:
head -1只需读取其输入的一行。然后它将退出并且发球台继续将其输出送入......
另一方面,tail -1必须读取完整的输入以完成其工作,因此在T恤完成之前它永远不会终止管道。
您可以安全地忽略损坏的管道消息,并且许多程序停止报告此类错误。在我的机器上我看不到它。