我刚刚发现了使用进行流程替换的方法>()
,对此感到非常兴奋,但是当我尝试使用它时,它并不总是有效。例如
这有效:
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上
以下解释了为什么 head 会出现错误但 tail 不会出现错误:
head -1 只需读取其输入的一行。然后它将退出,并且 T 恤继续将其输出输入...
另一方面,tail -1 必须读取完整的输入才能完成其工作,因此它永远不会在 tee 完成之前终止管道。
您可以安全地忽略损坏的管道消息,并且许多程序停止报告此类错误。在我的机器上我没有看到它。
归档时间: |
|
查看次数: |
1862 次 |
最近记录: |