我正在运行一些脚本,其中包含 cat
与 grep
流水线化的命令,例如:
cat file.txt | grep "pattern"
大多数时候没有问题。但有时我会遇到以下错误:
cat: write error: Broken pipe
那么我如何找出命令导致此问题的时间以及原因?
最佳答案
原因是管道在cat
还有一些数据要读取时被grep
关闭了。信号 SIGPIPE
被 cat 捕获并退出。
管道中通常发生的事情是 shell 在一个进程中运行 cat
并在另一个进程中运行 grep
。 cat
的标准输出连接到管道的写入端,grep
的标准输入连接到读取端。发生的事情是 grep
命中了一个不存在的模式搜索并立即退出导致管道的读取端被关闭,这 cat
不喜欢,因为它有更多要写入管道的数据。由于写操作发生在另一个已经关闭的另一端,SIGPIPE
被 cat
捕获并立即退出。
对于这种微不足道的情况,当文件内容通过 grep< 的标准输入可用时,您可以完全删除管道使用并将其作为
它可以从中读取。grep "pattern"file.txt
运行
关于linux - 为什么我很少而不是总是得到 "cat: write error: Broken pipe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664991/