windows cmd:为什么你指定输出redirect的顺序很重要?

如果你这样做

ipconfig.exe 1> output.log 2>&1 

这将把所有输出(stdout和stderr)指向“output.log”。

但是,如果您这样做(更改指定所需redirect的顺序)

 ipconfig.exe 2>&1 1> output.log 

这将不会达到将两个输出stream打印到“output.log”的预期效果,因为在这种情况下,“stderr”将被打印到控制台。

我怀疑这与“cmd”parsing命令的方式有关,这些命令根据指定redirect的顺序给出不同的含义。

如果是这样,语义规则是什么,他们在哪里logging?

我认为这是值得一提的事情,因为它可能会让人们挠头,试图弄清为什么他们的redirect不起作用,从而浪费了人们的时间。

重定向只是从左向右解析。 最初stdoutstderr指向控制台,因此,当您将stderr重定向到stdout当前在第二个示例中指向的位置时,您正在将stderr指向控制台。 随后,您将stdout重定向到一个文件。

这里的解释和例子对于进一步的参考很有帮助。