如何重定向我的程序,從而使輸出爲3檔,使得重定向程序輸出
- 標準輸出去到file1
- 標準錯誤去到file2
- 輸出和錯誤的綜合結果去在其原始爲了FILE3
- 雖然重定向,輸出也輸出到屏幕作爲在程序運行
我試圖
myprogram > file1 2> file2
但這並不滿足3 & 4.
編輯:這將是更好的,如果在屏幕上顯示在打印後立即的消息。 (提高響應能力)
如何重定向我的程序,從而使輸出爲3檔,使得重定向程序輸出
我試圖
myprogram > file1 2> file2
但這並不滿足3 & 4.
編輯:這將是更好的,如果在屏幕上顯示在打印後立即的消息。 (提高響應能力)
(./foo.sh > >(tee out.log) 2> >(tee err.log >&2)) |& tee all.log
我們在這裏做了什麼?首先,我們創建兩個子殼以運行tee out.log
和tee err.log
,並將相應的描述符重定向到它們。我們很謹慎地將stdout
從err.log
重新導向stderr
它所屬的地方,否則它會搞砸out.log
(因爲這個想法而信貸給https://stackoverflow.com/a/692407/4323)。其次,我們將整個東西放在一個子外殼中,以便我們可以將其stdout
和stderr
一次性重定向到all.log
,同樣使用tee
同時打印到屏幕上。
一個警告是,我們正在運行的程序可能緩衝標準輸出,當它不是一個TTY/PTY(終端設備)。如果您需要在屏幕上和文件中立即輸出stdout
,則可以嘗試使用unbuffer
運行程序,該程序可避免此緩衝。
myprogram > file1 2> file2 &> file3; cat file3
或者你認爲cat file3
是欺騙?
這根本不起作用,因爲'&>'撤銷'>'和'2>'。 –
它在我的Mac上運行得很好。 – user14717
那麼它不適用於OP詢問的Linux。奇怪。我有Bash 4.1.5,你可能有一個更老的。 –
可能的重複[如何在使用管道使用「tee」時將stderr寫入文件?](http://stackoverflow.com/questions/692000/how-do-i-write-stderr-to- a-file-while-using-tee-with-a-pipe) –