当stdr在stdout之后重定向时会发生什么?

时间:2013-04-03 18:08:06

标签: bash shell pipe

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

例如:

someCommand > log.txt 2>&1

VS

someCommand 2>&1 > log.txt

3 个答案:

答案 0 :(得分:4)

重定向按照出现顺序完成:

someCommand > log.txt 2>&1
  • stdout是文件描述符1 fd(1) == stdout
  • stderr是文件描述符2 fd(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是文件描述符1 fd(1) == stdout
  • stderr是文件描述符2 fd(2) == stderr
  • 将文件描述符2重定向到文件描述符1会产生fd(2) == fd(1) == stdout
  • 将文件描述符1重定向到log.txt会产生fd(1) == log.txt
  • 导致写入文件描述符1的所有内容实际写入log.txt
  • 并且写入文件描述符2的所有内容实际上都写入了stdout

答案 1 :(得分:0)

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

答案 2 :(得分:0)

someCommand > log.txt 2>&1 - stdout和stderr都发送到log.txt

someCommand 2>&1 > log.txt - stdout到log.txt,stderr到前stdout(屏幕)。