1

stderr被重定向之后会发生什么stdout,反之亦然?

例如:

someCommand > log.txt 2>&1

对比

someCommand 2>&1 > log.txt

4

3 回答 3

5

重定向按出现的顺序进行:

someCommand > log.txt 2>&1
  • stdout 是文件描述符 1fd(1) == stdout
  • stderr 是文件描述符 2fd(2) == stderr
  • 将文件描述符 1 重定向到log.txt结果fd(1) == log.txt
  • 将文件描述符 2 重定向到文件描述符 1 会导致fd(2) == fd(1) == log.txt
  • 导致写入文件描述符 1 或 2 的所有内容实际上都写入 log.txt。

someCommand 2>&1 > log.txt
  • stdout 是文件描述符 1fd(1) == stdout
  • stderr 是文件描述符 2fd(2) == stderr
  • 将文件描述符 2 重定向到文件描述符 1 会导致fd(2) == fd(1) == stdout
  • 将文件描述符 1 重定向到log.txt结果fd(1) == log.txt
  • 导致写入文件描述符 1 的所有内容实际上都写入 log.txt
  • 并且写入文件描述符 2 的所有内容实际上都写入了 stdout
于 2013-04-03T18:18:19.407 回答
0

someCommand > log.txt 2>&1- stdout 和 stderr 都为log.txt.

someCommand 2>&1 > log.txt- 标准输出到log.txt,标准错误到前标准输出(屏幕)。

于 2013-04-03T18:14:25.437 回答
0

在第一种情况下,stdout 被定向到文件log.txt,然后 stderr 被定向到 stdout 附加到的内容(文件log.txt)。在第二种情况下。stderr 指向 stdout 附加到的东西(可能是 tty),然后 stdout 指向 file log.txt

于 2013-04-03T18:11:24.270 回答