使用top重定向命令可以正常工作:
top > top.log
Run Code Online (Sandbox Code Playgroud)
现在我想用 grep 来过滤某行:
top | grep "my_program" > top.log
Run Code Online (Sandbox Code Playgroud)
但日志文件将保持为空。但是 grep 在使用时会提供输出
top | grep "my_program"
Run Code Online (Sandbox Code Playgroud)
哪里my_program必须被一个正在运行的程序替换才能看到一些输出。
为什么我的方法不起作用?我该如何解决?
小智 24
我得到了你描述的相同行为。在 Ubuntu 11.10 上
top | grep "my_program" > top.log
Run Code Online (Sandbox Code Playgroud)
不产生任何输出。
我相信这样做的原因是 grep 正在缓冲其输出。要告诉 GNU grep 逐行输出输出,请使用以下--line-buffered选项:
top | grep --line-buffered "my_program" > top.log
Run Code Online (Sandbox Code Playgroud)
有关其他潜在解决方案,另请参阅此SO 问题。