2009-02-17 121 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); - >關閉標準輸出緩衝