5

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

有没有办法强制 grep 刷新?

谢谢。

更新:似乎 --line-buffered 会有所帮助。

4

1 回答 1

3

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

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

请参阅http://www.pixelbeat.org/programming/stdio_buffering/以获得对该问题的良好概述和一些常见的解决方案。

于 2011-07-15T13:02:23.083 回答