如何在不缓冲stdout和stderr的情况下记录输出

Jer*_*rks 9 logging makefile buffering stderr

我在从自动构建中记录输出时遇到问题.

使用Makefile和makefile实用程序完成构建.

问题是像编译器命令行这样的正常输出转到stdout并且编译错误转到stderr.

我想从屏幕上显示的构建中获取输出.所以类似于:

(stdout) CC -c file.cpp
(stderr) Compile error at file.cpp line 232, blah blah blah
(stdout) CC -c file2.cpp
Run Code Online (Sandbox Code Playgroud)

我尝试过(从ksh脚本)是:

make -k> build.log 2> build.log

这导致单个日志文件,但问题是流被缓冲,因此日志文件中的结果全部混淆.

我可以将输出捕获到2个单独的日志文件中,但之后我就没有关于如何将它们粘合到一个日志文件中的信息.

在这种情况下,有没有办法关闭stdout和stderr的缓冲?

Rya*_*ham 25

make -k > build.log 2>&1
Run Code Online (Sandbox Code Playgroud)

这应该对你更好,因为它不是单独重定向stderr和stdout,而是将stderr重定向到stdout,这应该使缓冲同步.

如果要将其记录到文件中,并将其打印到控制台:

make -k 2>&1 | tee build.log
Run Code Online (Sandbox Code Playgroud)


S.L*_*ott 5

试试这个

make -k > build.log 2>&1
Run Code Online (Sandbox Code Playgroud)