重定向 2>&1 1>file.txt 和 >a.txt 2>&1 有什么区别?

重定向 2>&1 1>file.txt 和 >a.txt 2>&1 有什么区别?

./prog 2>&1 1>file.txt重定向和之间有什么区别./prog >a.txt 2>&1? 看起来./prog 2>&1 1>file.txt不会将 stderr 保存到文件,但是这个./prog >a.txt 2>&1会。

答案1

重定向操作符从左到右进行检查,因此

 foo > bar 2>&1

第一的将标准输出重定向到bar,然后将标准错误重定向到此时标准输出重定向的位置(因此bar也是如此)。

 foo 2>&1 > bar

第一的将标准错误重定向到标准输出指向的位置(很可能是终端),然后将标准输出重定向到bar

简而言之:第一个将stdout和重定向stderrbar,第二个仅重定向stdoutbarstderr终端。

相关内容