我有以下声明:
for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc; done
但是它一直将所有输出写入控制台而不是文件“out.asc”。请帮助我将输出重定向到文件而不是屏幕。提前致谢!
for i in `cat i.txt`; do wine ~/run.exe $i.asc 2>> out.asc; done
2>>
运算符中的 2,它表示标准错误输出。>> out.asc 2>&1
将同时重定向两个输出。 - glenn jackman尝试将标准错误(2)重定向到标准输出(1)
for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; 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
也许你既有标准输出,又有错误输出。使用 >>
和 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
"$i"
。这很重要,因为如果您的变量包含特殊字符,则不会被转义。 - Lynch