2009-02-17 124 views
7

我在登录到自动构建输出时遇到问题。如何从标准输出和stderr中记录输出而不缓冲

构建工作由Makefile和makefile工具完成。

问题是,正常输出像编译器命令行去标准输出和编译错误去标准错误。

我想从构建的输出,因为它会显示在屏幕上。因此,像:

(stdout) CC -c file.cpp 
(stderr) Compile error at file.cpp line 232, blah blah blah 
(stdout) CC -c file2.cpp 

我想什么(从KSH脚本)是:

化妆-k> build.log 2> build.log

这导致在一个日志文件,但问题是这些流被缓冲,所以日志文件中的结果全部混淆起来。

我可以将输出捕获到2个独立的日志文件中,但是我没有关于如何将它们粘贴回单个日志文件的信息。

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

回答

22
make -k > build.log 2>&1 

这应该更好地为你,因为它不是重定向标准错误和stdout分开,但重定向错误输出到标准输出,这将使缓冲同步跟进。

如果你想将它记录到一个文件,以及它打印到控制台:

make -k 2>&1 | tee build.log 
+0

嗨瑞安,它的作品像一个魅力,但我有一个问题,如何在登录和查看邮件时间? 您的命令只记录消息。谢谢 – 2015-05-05 04:09:42

4

试试这个

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

setbuf(stdout,NULL); - >关闭标准输出缓冲