2010-12-09 66 views
3

我有一堆可執行文件,我想將它們中的每一個的輸出存儲在一個單獨的文件中。重定向由可執行文件創建的文件中的所有內容?

爲此,我正在使用以下命令,但"2>&1"每次都不起作用。有時輸出文件保持空白,即使腳本在從shell運行時在shell中打印內容。

我應該用什麼來代替2>&1

./$file 2>&1 | tee "$outputFile" 

回答

2

如果你想同時捕獲輸出和錯誤使用:

./$file > $outputfile 2>&1 

但是,有些程序是聰明的,檢測其輸出重定向的終端類型。如果將它發送到文件中,它們可能會生成不同的輸出...

+0

該命令是如何工作的? – baltoro 2010-12-09 17:03:06

+0

>>符號是否輸出stdout而2>&1是否將stderr輸出到輸出文件?非常感謝 。 :D – baltoro 2010-12-09 17:03:54

+0

是的,>重定向stdout,2>重定向stderr,更具體地說2>&1重定向stderr到stdout – ivy 2010-12-10 12:06:17

3

某些可執行文件不僅寫入stdout和stderr,而是打開/ dev/tty並寫入該文件。

因此,重定向這些是有必要做更復雜的程序涉及psuedo-tty。請參閱命令script,瞭解可以執行此操作的內容。

2

只是要詳細說明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命令內執行命令,看看它是否捕獲所有結果。

相關問題