[英]Getting error “cat: write error: Broken pipe” only when running bash script non-interactively
[英]Why am I getting “cat: write error: Broken pipe” rarely and not always
我正在运行一些带有cat
使用grep
流水线的命令的脚本,例如:
cat file.txt | grep "pattern"
大多数时候没有问题。 但有时我会收到以下错误:
猫:写错误:管道损坏
那么我如何找出命令何时导致此问题以及为什么?
原因是因为管道在仍有一些数据要从cat
读取时被grep
关闭。 信号SIGPIPE
被 cat 捕获并退出。
通常在管道中发生的是 shell 在一个进程中运行cat
在另一个进程中运行grep
。 cat
的 stdout 连接到管道的写入端, grep
stdin 连接到读取端。 发生的事情是grep
遇到了一个不存在的模式搜索并立即退出,导致管道的读取端关闭, cat
不喜欢这种情况,因为它有更多的数据要写到管道中。 由于写入操作发生在另一端已关闭的另一个上,因此SIGPIPE
被它立即退出的cat
捕获。
对于这种微不足道的情况,您可以完全删除管道使用并将其作为grep "pattern" file.txt
运行,当文件的内容可通过grep
的标准输入读取时。
您只能使用没有管道的 grep ,如下所示:
grep "pattern" file.txt
我认为最好解决这个问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.