我应该如何理解"> outfile 2>&1"和"2>&1> outfile"?

Jas*_*ung 4 c unix linux shell

我无法理解这两种情况之间的区别:

  1. ./a.out > outfile 2>&

    我可以在outfile中看到标准输出和错误输出

  2. ./a.out 2>& > outfile

    我只能看到标准输出int outfile,并在屏幕上打印错误输出

我该怎么理解这个?我认为他们是一样的!

adl*_*adl 8

n> file创建/截断file并将其与文件描述符相关联n.如果n未指定,1则假定(即标准输出).

n>&mdup2()文件描述符复制(使用)mn.

因此,如果您编写./a.out 2>& >outfile,则首先将标准输出描述符复制到stderr描述符,然后将stdout重定向到outfile.

如果您愿意,可以将这些重定向运算符视为赋值:

  • 2>& >file 将被视为fd2 := fd1; fd1 := "file",这是不一样的
  • >file 2>& 是的 fd1 := "file"; fd2 := fd1