三通管中的折断的管道,带有工艺替代物

nau*_*cho 5 bash shell

我刚刚发现了使用进行流程替换的方法>(),对此感到非常兴奋,但是当我尝试使用它时,它并不总是有效。例如

这有效:

cat /usr/share/dict/words |tee >(tail -1) > /dev/null
ZZZ
Run Code Online (Sandbox Code Playgroud)

这会导致管道错误:

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

知道为什么吗?谢谢!

更新:这是在RHEL 4和RHEL 6.2上

use*_*755 1

以下解释了为什么 head 会出现错误但 tail 不会出现错误:

head -1 只需读取其输入的一行。然后它将退出,并且 T 恤继续将其输出输入...

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

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