Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux bash输出到文件_Linux_Bash_Wine - Fatal编程技术网

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