Linux bash输出到文件
我有以下声明Linux bash输出到文件,linux,bash,wine,Linux,Bash,Wine,我有以下声明 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 注意2>操作符中的2,这意味着
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
注意
2>
操作符中的2,这意味着stderr。尝试将stderr(2)重定向到stdout(1)
也许您有标准输出和erro输出。使用
>
和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
其他人已经回答了你的实际问题,我想展示一个更好的习惯用法来阅读文件的行 而不是
for i in `cat i.txt`; do
: do something with $i
done
试一试
而IFS=read-r行;做
:用“$i”做某事
完成
查看一下。也许示例3.6最适合您。您还应该养成引用变量的习惯。在这种情况下,“$i”
。这很重要,因为如果变量包含特殊字符,它将不会被转义。这将不会将stdout输出到out.asc。只有stderr将被重定向。因此,>out.asc 2>&1
将同时重定向这两个
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