当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么我很少得到"cat:写错误:断管",而不是总是如此》经验,为你挑选了1个好方法。

我正在运行一些脚本,在几个地方,我正在运行用grep管道化的猫,如:

cat file.txt | grep "pattern"

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

cat:写错误:管道坏了

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



1> Inian..:

原因是管道grep在仍有一些数据要读取时关闭cat.信号SIGPIPE被猫抓住并退出.

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

对于这样一个简单的案例,您可以完全删除管道使用并运行它,就像grep "pattern" file.txt文件的内容通过grep它可以读取的stdin一样可用.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有