3

我有以下声明

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

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

4

4 回答 4

4

可能是 wine 正在写入 stderr,因此您需要重定向它:

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

注意运算符中的22>>,这意味着 stderr。

于 2011-04-28T16:45:33.193 回答
4

尝试将 stderr (2) 重定向到 stdout (1)

for i in `cat i.txt`; do wine ~/run.exe $i.asc >> out.asc 2>&1; done
于 2011-04-28T16:46:40.397 回答
0

也许你有标准输出和错误输出。使用>>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
于 2011-04-28T16:48:28.940 回答
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
于 2011-04-28T19:35:08.237 回答