为什么我很少得到“cat:写错误:断管”,而不是总是如此

时间:2018-04-05 05:47:58

标签: linux bash grep cat broken-pipe

我正在运行一些脚本,并且在几个地方运行带有grep的cat管道,如:

xlPasteValues

大多数时候没有问题。但有时我会得到

  

cat:写入错误:管道损坏

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

2 个答案:

答案 0 :(得分:5)

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

管道中经常发生的事情是shell在一个进程中运行grep而在另一个进程中运行catgrep的stdout连接到管道的写端和grep的stdin到读取端。发生了什么cat命中了一个不存在的模式搜索并立即退出,导致管道的读取结束被关闭,SIGPIPE不喜欢,因为它有更多的数据需要写入管道。由于写入操作发生在另一端已关闭的另一端,cat会被它立即退出的grep "pattern" file.txt捕获。

对于这样一个简单的案例,您可以完全删除管道使用情况,并在文件的内容通过它可以读取的grep的标准输入上获得时以A运行它从

答案 1 :(得分:0)

您只能使用不带管道的grep,例如:

grep "pattern" file.txt

我认为最好解决这个问题