这有效:
tail -f debug.log | grep RFC
......但这不是:
tail -f debug.log | grep RFC > file.log
你能帮我弄明白为什么吗?
答案 0 :(得分:1)
只有在file.log
和tail
完成后,您的输出才会被缓冲并重定向到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.