我有一堆可執行文件,我想將它們中的每一個的輸出存儲在一個單獨的文件中。重定向由可執行文件創建的文件中的所有內容?
爲此,我正在使用以下命令,但"2>&1"
每次都不起作用。有時輸出文件保持空白,即使腳本在從shell運行時在shell中打印內容。
我應該用什麼來代替2>&1
?
./$file 2>&1 | tee "$outputFile"
我有一堆可執行文件,我想將它們中的每一個的輸出存儲在一個單獨的文件中。重定向由可執行文件創建的文件中的所有內容?
爲此,我正在使用以下命令,但"2>&1"
每次都不起作用。有時輸出文件保持空白,即使腳本在從shell運行時在shell中打印內容。
我應該用什麼來代替2>&1
?
./$file 2>&1 | tee "$outputFile"
如果你想同時捕獲輸出和錯誤使用:
./$file > $outputfile 2>&1
但是,有些程序是聰明的,檢測其輸出重定向的終端類型。如果將它發送到文件中,它們可能會生成不同的輸出...
某些可執行文件不僅寫入stdout和stderr,而是打開/ dev/tty並寫入該文件。
因此,重定向這些是有必要做更復雜的程序涉及psuedo-tty。請參閱命令script
,瞭解可以執行此操作的內容。
只是要詳細說明Darron的答案,您可以使用script
命令來捕獲所有輸出。下面是寫入stdout爲例,標準錯誤,並使用python腳本的/ dev/tty的,並捕獲所有三個輸出:
[email protected]:~$ cat test.py
import sys
sys.stdout.write('o\n')
sys.stderr.write('e\n')
with open('/dev/tty', 'w') as tty:
tty.write('t\n')
[email protected]:~$ script testout
Script started, file is testout
[email protected]:~$ python test.py
o
e
t
[email protected]:~$ exit
Script done, file is testout
[email protected]:~$ head -n -3 testout | tail -n +3
o
e
t
對比這與當您使用會發生什麼2>1&
和tee
:
[email protected]:~$ python test.py 2>&1 | tee testout
e
t
o
[email protected]:~$ cat testout
e
o
如您所見,寫入/dev/tty
未被捕獲。嘗試在script
命令內執行命令,看看它是否捕獲所有結果。
該命令是如何工作的? – baltoro 2010-12-09 17:03:06
>>符號是否輸出stdout而2>&1是否將stderr輸出到輸出文件?非常感謝 。 :D – baltoro 2010-12-09 17:03:54
是的,>重定向stdout,2>重定向stderr,更具體地說2>&1重定向stderr到stdout – ivy 2010-12-10 12:06:17