是否存在一个简单的单行代码用于从程序而不只是文件中 grep 连续输出?
现在作为一个例子,我想跳过PHPUnit
其中包含的行。由于显而易见的原因,以下要点并没有做到这一点:
phpunit tests/cases | grep -v --line-buffered "PHPUnit"
它可以作为通用的 oneliner 来完成,而不需要用户定义的函数等吗?
答案1
这听起来像是 phpunit 命令的输出正在被缓冲(通过 PHP、Bash shell 或grep
)。有几种方法可以取消缓冲输出,使其响应更快。
解缓冲
$ unbuffer phpunit tests/cases | grep -v --line-buffered "PHPUnit"
标准缓冲区
您可以尝试使用stdbuf
命令禁用缓冲。
$ stdbuf -i0 -o0 -e0 phpunit tests/cases | grep -v --line-buffered "PHPUnit"
开关的详细信息:
-i, --input=MODE
adjust standard input stream buffering
-o, --output=MODE
adjust standard output stream buffering
-e, --error=MODE
adjust standard error stream buffering
因此,上面将 STDIN、STDOUT、STDERR 的缓冲设置为零。
grep
Grep 本身可能是缓冲输出的罪魁祸首。您可以告诉它一次只缓冲一行输出。 (您已经提到/发现了这一点,但我提到它是为了让本问答的未来观众能够理解那里也存在缓冲)。
$ phpunit tests/cases | grep -v --line-buffered "PHPUnit"