2011-04-28 111 views
2

我有下面的語句慶典輸出到文件

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc; done 

但它一直寫所有的輸出不安慰文件「out.asc」。你可以幫我把輸出重定向到文件而不是屏幕。提前致謝!

+0

看看到http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html。也許樣品3.6是最適合你的。 – jotapdiez 2011-04-28 16:47:57

+0

你也應該習慣引用你的變量。在這種情況下''$ i「'。這個問題,因爲如果你的變量包含特殊的字符,它不會被轉義。 – Lynch 2011-04-28 16:56:18

回答

4

這可能是酒被寫入標準錯誤,所以你需要重定向:

for i in `cat i.txt`; do wine ~/run.exe $i.asc 2>> out.asc; done 

請注意,在2>>運營商,這意味着標準錯誤。

+0

這不會將stdout輸出到out.asc。只有stderr會被重定向。 – Lynch 2011-04-28 16:50:39

+0

因此,'>> out.asc 2>&1'會重定向 – 2011-04-28 19:32:01

4

嘗試重定向標準錯誤(2)到stdout(1)

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; done 
0

也許你有一個標準輸出和埃羅輸出。使用>>2>>將兩個輸出流重定向到您的文件。

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>> out.asc; done 

你可以任意源重定向到不同的文件:

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>> err.asc; done 
0

其他已經回答了你的問題的實際,我想表現出更好的成語來讀取文件的線。

而不是

for i in `cat i.txt`; do 
    : do something with $i 
done 

嘗試

while IFS= read -r line; do 
    : do something with "$i" 
done < i.txt