无法使用输出重定向工作

时间:2018-03-09 21:33:30

标签: bash shell grep tail buffering

这有效:

tail -f debug.log | grep RFC

......但这不是:

tail -f debug.log | grep RFC > file.log

你能帮我弄明白为什么吗?

1 个答案:

答案 0 :(得分:1)

您的问题

只有在file.logtail完成后,您的输出才会被缓冲并重定向到grep。这是因为,默认情况下,grep在未输出到终端时保持其输出缓冲(在您的情况下,输出将转到文件file.log)。

与其tail选项一起使用的

-f永远不会停止向grep发送输出,grep从未在重定向中发送其输出,因为tail等待grep到在将缓冲区写入输出文件之前停止发送输入。

解决方案

要将命令的输出重定向到文件,您可以使用--line-buffered的{​​{1}}选项:

tail -f debug.log | grep --line-buffered RFC > file.log

来源

来自grep的手册页:

 --line-buffered
         Force output to be line buffered.  By default, output is line
         buffered when standard output is a terminal and block buffered
         otherwise.