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