有什么区别:
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
重定向到日志。