繁体   English   中英

为什么我很少收到“cat: write error: Broken pipe”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM