cmd 2>&1> log vs cmd> log 2>&1

有什么区别:

cmd > log 2>&1 

 cmd 2>&1 > log 

cmd是一个命令?

我应该select哪一个?为什么?

订单很重要。 推理重定向的方法是从左到右读取它们,并意识到重定向使流指向相同的地方。 他们不会让流彼此指向。

那是什么意思? 如果你说2>&1那么你将stderr重定向到stdout当前被重定向到的任何地方。 如果stdout去控制台,那么stderr也是。 如果标准输出到一个文件,那么stderr也是如此。 如果你通过重定向stdout来跟踪这个,stderr仍然指向stdout指向的内容。 它不会“跟随”stdout到新的位置。

 cmd > log 2>&1 

这将stdout重定向到log ,然后将stderr重定向到stdout现在被重定向到的任何地方,即log

最终结果: stdout和stderr都被重定向到log

错误

 cmd 2>&1 > log 

这将stderr重定向到标准输出当前正被重定向的地方,通常是控制台。 然后stdout被重定向到log 。 请记住,stderr不会“跟随”stdout,因此它会继续重定向到控制台。

最终结果: stdout被重定向到日志文件,stderr被(仍然)发送到控制台。 这几乎肯定不是你想要的。

 cmd > log 2>&1 

重定向STDOUT以记录并用重定向的STDOUT替换STDERR

 cmd 2>&1 > log 

STDERR替换为STDOUT ,然后将原始 STDOUT重定向到日志。