2012-11-27 104 views
47

我想扔命令輸出到文件加控制檯也。這是因爲我想保留文件中的輸出記錄。我正在做以下操作,它附加到文件,但不在終端上打印ls輸出。命令輸出重定向到文件和終端

$ls 2>&1 > /tmp/ls.txt 
+2

典型的三通用例 – Kent

回答

74

是的,如果你重定向輸出,它不會出現在控制檯上。使用tee

ls 2>&1 | tee /tmp/ls.txt 
+0

是否寫入標準錯誤和標準輸出都? – Satish

+2

在這種情況下,錯誤被合併到輸出('2>&1')中,所以下一個使用管道的進程將把它們看作是常規輸入(簡而言之:是)。 –

+0

我如何使用T恤附加日誌? – Satish

9

如果有人需要追加輸出,而不是覆蓋,可以使用「-a」或「--append」,「三通」命令的選項:

ls 2>&1 | tee -a /tmp/ls.txt 
ls 2>&1 | tee --append /tmp/ls.txt 
+1

我喜歡它......它在Mac上順利運行 –

17

這是值得一提的是,2> & 1表示標準錯誤也將被重定向,並與標準輸出一起。所以

someCommand | tee someFile 

給你只是在文件中的標準輸出,而不是標準的錯誤:將只顯示在控制檯標準錯誤。要獲得文件中的標準錯誤,您可以使用

someCommand 2>&1 | tee someFile 

(來源:In the shell, what is " 2>&1 "?)。最後,上述兩個命令都會截斷文件並開始清除。如果您使用一系列命令,您可能希望一個接一個地獲得所有輸出的輸出&。在這種情況下,你可以使用-a標誌爲「三通」的命令:

someCommand 2>&1 | tee -a someFile 
相關問題