为什么我很少"cat: write error: Broken pipe",而且并不总是



我正在运行一些脚本,这些脚本的命令cat流水线如下grep

cat file.txt | grep "pattern"

大多数时候没有问题。但有时我会得到以下错误:

猫:写入错误:管道破损

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

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

管道中通常发生的情况是 shell 在一个进程中运行cat,在另一个进程中grep运行。cat 的标准输出连接到管道的写端,grep的标准输出连接到读取端。发生的事情是grep命中了一个不存在的模式搜索并立即退出,导致管道的读取端关闭,cat不喜欢这样做,因为它有更多的数据要写出到管道中。由于写入操作发生在另一端已关闭的另一个操作上,因此SIGPIPE被它立即退出的cat捕获。

对于这种微不足道的情况,您可以完全删除管道用法,并在文件的内容通过可以从中读取的 stdin grep可用时grep "pattern" file.txt运行它。

你可以像这样只使用没有管道的 grep

grep "pattern" file.txt

我认为最好解决这个问题

最新更新