10

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

构建是使用 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

我尝试过的(来自 ksh 脚本)是:

制作 -k > build.log 2> build.log

这会产生一个日志文件,但问题是流被缓冲,因此日志文件中的结果全部混淆了。

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

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

4

4 回答 4

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

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

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

make -k 2>&1 | tee build.log
于 2009-02-17T19:11:31.513 回答
5

试试这个

make -k > build.log 2>&1
于 2009-02-17T19:06:15.240 回答
0

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

将它们重新粘合在一起很棘手,但也有一个正确的答案,而且它有效!请参阅 Vivek Gite 的“如何将 stdout 和 stderr 保存或重定向到不同的文件?”。

于 2009-04-21T07:44:05.350 回答
-2

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

于 2009-05-06T06:44:02.657 回答