2012-07-06 77 views
2

有大量線程討論如何爲腳本或cmdline(主要涉及管道,重定向,tee)執行此操作。 我沒有找到的是一種解決方案,可以設置一次,然後在全局範圍內工作,不需要操作單個腳本或向每個命令行添加內容。將所有stderr記錄到文件和控制檯

我想達到的目標是一樣的東西在 How do I write stderr to a file while using "tee" with a pipe?

頂端回答所描述的不是它可以配置bash命令,使所有標準錯誤輸出記錄到文件中,同時仍然將其寫入安慰?什麼我可以添加到.bashrc,並因此每次我登錄時自動設置?

軟件:猛砸4.2.24(1)-release下(x86_64-PC-Linux的GNU),xterm中,Ubuntu的12.04

+0

你是對的,道歉。我所描述的方法只適用於連接管道,而不是爲了您想要的目的。我很茫然。刪除了我的答案。 – 0xC0000022L 2012-07-06 17:30:23

+0

我不知道如何做只有'stderr',但我知道如何做所有輸出顯示。這對你有用嗎? – cha0site 2012-07-06 18:05:38

回答

0

嘗試在@ 0xC0000022L以前的解決方案(把它放在你的.bash_profile)這種變化:

exec 2> >(tee log.file > /dev/tty) 

需要注意幾個問題:

  1. 你在命令行中鍵入的提示和任何打印到stderr,因此會在你的文件中記錄。

  2. 可能有一個問題,換行符終止命令不顯示在您的終端;我在我的Linux主機上觀察它,但不是在我的Mac OS X筆記本電腦上。也許別人可以解釋和/或解決這個問題。例如,如果我輸入「回聲標準輸出」,我看到以下內容:

    $ echo stdoutstdout 
    $ 
    
+0

附加到'/ dev/tty'以避免丟失換行符(我不知道爲什麼)。 'exec 2>>(tee -a log.file >>/dev/tty)'您還需要使用'-a'附加到日誌文件。 – 2012-07-06 18:38:44

+0

heureka!注意:該文件可能會寫入一些延遲。在我的第一次快速測試中,只有在關閉會話後才被刷新。如果我發現任何問題,我會報告回來。謝謝! – 2012-07-07 20:24:58

相關問題