我正在运行一些脚本,在几个地方,我正在运行用grep管道化的猫,如:
cat file.txt | grep "pattern"
大多数时候都没有问题.但有时我会得到
cat:写错误:管道坏了
那么如何找出导致此问题的cat命令以及原因?
原因是管道grep
在仍有一些数据要读取时关闭cat
.信号SIGPIPE
被猫抓住并退出.
通常在管道中发生的是shell cat
在一个进程grep
中运行而在另一个进程中运行.stdout cat
连接到管道的写端和stdin grep
到读端.发生grep
了什么事情是一个模式搜索不存在并立即退出导致管道的读取结束,这cat
是不喜欢的,因为它有更多的数据要写入管道.由于写入动作发生在另一端已被关闭的另一端,SIGPIPE
因此被cat
其立即退出.
对于这样一个简单的案例,您可以完全删除管道使用并运行它,就像grep "pattern" file.txt
文件的内容通过grep
它可以读取的stdin一样可用.