当我执行此命令(fail.cpp是一个充满编译器错误的简单程序)时,错误不会直接在屏幕上输出,而是在fail.out文件中输出:
g++ fail.cpp > fail.out 2>&1
从我对bash的介绍性理解中,这是有道理的:>
将程序输出(stdout,又名1)2>&1
重定向到fail.out,而将stderr(又名2)重定向到这个新的stdout位置,也就是文件。(?)
但是更改命令的顺序会使事情有所不同:
g++ fail.cpp 2>&1 > fail.out
现在,错误消息直接显示在屏幕上,fail.out是空白文件。
为什么是这样?似乎与上述想法相同:将此命令将产生的错误重定向到stdout(2>&1
),然后将其重定向到fail.out文件。我想念的是操作命令吗?
2>&1
表示“将stderr重定向到当前stdout所连接的位置”,并按从左到右的顺序处理重定向。所以第一个这样做:
第二个是:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句