我有以下声明
for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc; done
但它一直将所有输出写入控制台而不是文件'out.asc'。请你帮我将输出重定向到文件而不是屏幕。提前致谢!
可能是 wine 正在写入 stderr,因此您需要重定向它:
for i in `cat i.txt`; do wine ~/run.exe $i.asc 2>> out.asc; done
注意运算符中的22>>
,这意味着 stderr。
尝试将 stderr (2) 重定向到 stdout (1)
for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; done
也许你有标准输出和错误输出。使用>>
and2>>
将两个输出流重定向到您的文件。
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
其他人已经回答了您的实际问题,我想展示一个更好的习惯用法来读取文件的行。
代替
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