首页 > 解决方案 > 正在运行的进程上的 greps 管道不输出任何内容

问题描述

我正在使用 macbook,达尔文操作系统。

我有一个正在运行的进程 ./r ,它生成一个它运行的日志文件。这是一个长期运行的过程。

当我像这样过滤一次时,它会起作用,并且我会看到所有行,但其中包含“A”的行除外。

./r | grep -v A

但是当我这样做时,没有输出,即使并非所有行都包含'B'

./r | grep -v A | grep -v B

为了证明这一点,我可以做到这一点,这确实显示了输出。

./r > tmp
# wait 30 seconds, ctrl-c
cat tmp | grep -v A | grep -v B

标签: linuxmacospipe

解决方案


缓冲。

当它在 tmp 文件中并通过管道将其输入时,有一个 EOF,它结束了管道。但是对于您正在运行的进程,EOF 永远不会出现(因为进程仍在运行)。

可能有一个环境和/或操作系统级别的设置,idk ......但你可以强制 grep 不缓冲超过一行。

试试这个。

grep --line-buffered -v A

推荐阅读