将Bash输出保存到文件

3

我有以下声明:

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

但是它一直将所有输出写入控制台而不是文件“out.asc”。请帮助我将输出重定向到文件而不是屏幕。提前致谢!

请查看http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html。也许样例3.6最适合您。 - jotapdiez
你还应该养成引用变量的习惯。在这种情况下,使用 "$i"。这很重要,因为如果您的变量包含特殊字符,则不会被转义。 - Lynch
4个回答

4
可能是因为Wine正在向标准错误输出写入内容,因此您需要重定向它:
for i in `cat i.txt`; do wine ~/run.exe $i.asc 2>> out.asc; done

请注意 2>> 运算符中的 2,它表示标准错误输出。

这个命令不会将 stdout 输出到 out.asc 文件中,只有 stderr 会被重定向。 - Lynch
因此,>> out.asc 2>&1 将同时重定向两个输出。 - glenn jackman

4

尝试将标准错误(2)重定向到标准输出(1)

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; 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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接