为什么描述符重定向看起来不一致?

nhe*_*hed 3 bash

  • 我们大多数人都知道要将STDERR重定向到STDOUT 2>&1
  • 我们也知道文件重定向使用" >"和使用过程中的重定向" |"

我一直想知道的是关于上述两者的结合

如果要将prog1的 STDERR和STDOUT重定向到prog2,则将2>&1前一个放在|prog2管道上.另一方面,如果你将prog1的STDERR和STDOUT重定向到一个文件(file.txt),那么就是2>&1> file.txt.

所以我知道怎么做,我只是想知道为什么这样做.对我而言似乎不一致,但我可能会以错误的方式看待它

谢谢

Ben*_*Ben 5

它们按顺序处理.

所以,如果你这样做

progname 2>&1 1>out.txt
Run Code Online (Sandbox Code Playgroud)

这会将stderr 从程序转移到程序stdout 的当前目标,即stdout流的shell,并将程序的stdout 转移到out.txt.

如果你这样做

progname 1>out.txt 2>&1 
Run Code Online (Sandbox Code Playgroud)

这会将程序的stdout转移到out.txt,然后将stderr 从程序转移到程序stdout 的当前目标,即out.txt.