【发布时间】:2014-02-16 06:47:25
【问题描述】:
当我执行这个命令时(fail.cpp 是一个充满编译器错误的简单程序),错误不会直接输出到屏幕上,而是在 fail.out 文件中:
g++ fail.cpp > fail.out 2>&1
根据我对 bash 的初步理解,这是有道理的:> 将程序输出(stdout,a.k.a. 1)重定向到 fail.out,而 2>&1 将 stderr(a.k.a. 2)重定向到 stdout 的这个新位置,这是文件。 (?)
但是改变命令的顺序会让事情发生不同:
g++ fail.cpp 2>&1 > fail.out
现在,错误信息直接显示在屏幕上,fail.out 是一个空白文件。
这是为什么?看起来与上面的想法相同:将此命令将产生的错误重定向到 stdout (2>&1),然后将其重定向到 fail.out 文件。这是我缺少的操作顺序吗?
【问题讨论】:
-
bash manual中的一个很好的解释。
标签: c++ bash scripting stdout stderr