2011-06-13 57 views
5

因此,我记录了一些调试信息,并将它发送到stdout,然后我将其grep为一个字符串。在某个时刻,日志记录完成,应用程序正在等待内容,但grep的输出在中间被截断。所以它匹配一条线,但没有输出所有线。发送到stdout,grepped的系统日志的输出在中间被截断

有没有办法强制grep刷新?

谢谢。

更新: 看来,线路缓冲将有所帮助。

回答

3

我认为你通过使用-line-buffered标志解决了grep问题。还要确保你的应用程序在每行之后刷新标准输出。如果你的stdout是一个终端,行缓冲是默认的,但是当你将它传输到另一个程序时,默认是使用完全缓冲。

如果您将数据管道输入到没有-line-buffered标志的程序中(例如uniq),请查看stdbuf程序(http://www.pixelbeat.org/programming /stdio_buffering/stdbuf-man.html),它允许你修改任何程序的缓冲选项。

请参阅http://www.pixelbeat.org/programming/stdio_buffering/,以便对该问题和一些常见解决方案有一个很好的概述。

+0

良好的链接资源。 – artfulrobot 2012-01-30 10:22:18