Why am I getting "cat: write error: Broken pipe" rarely and not always

Why am I getting "cat: write error: Broken pipe" rarely and not always

我是 运行 一些脚本,其命令 catgrep 流水线化,例如:

cat file.txt | grep "pattern"

大部分时间都没有问题。但有时我会遇到以下错误:

cat: write error: Broken pipe

那么我如何找出命令导致此问题的时间以及原因?

原因是管道被grep关闭,而它仍然有一些数据要从cat读取。信号 SIGPIPE 被 cat 捕获并退出。

管道中通常发生的是一个进程中的 shell 运行s cat 和另一个进程中的 grepcat 的 stdout 连接到管道的 write-end,grep 的 stdin 连接到读取端。发生的事情是 grep 命中了一个不存在的模式搜索并立即退出导致管道的读取端被关闭,cat 不喜欢它,因为它有更多的数据要写出管道。由于写操作发生在另一个已经关闭的另一端,SIGPIPEcat 捕获并立即退出。

对于这种微不足道的情况,您可以完全删除管道使用,并 运行 当文件内容在 grep 的标准输入上可用时,将其作为 grep "pattern" file.txt可以阅读。

您只能像这样使用没有管道的 grep :

grep "pattern" file.txt

我觉得还是解决这个问题比较好