之间有什么区别?
cmd > log 2>&1
和
cmd 2>&1 > log
命令在哪里?
我应该选择哪个?为什么?
顺序很重要。进行重定向的方法是从左到右读取它们,并意识到重定向使流指向同一位置。它们不会使流指向彼此。
这意味着什么?如果您说的话,2>&1那么您会将stderr重定向到stdout当前重定向到的位置。如果stdout要进入控制台,则stderr也将进入。如果stdout要去一个文件,那么stderr也是。如果您随后通过重定向stdout进行此操作,则stderr仍将指向stdout 过去 指向的内容。它不会“按照”标准输出到新位置。
2>&1
这会将stdout重定向到log,然后将stderr重定向到现在正在将stdout重定向到的位置log。
log
最终结果: 将stdout和stderr都重定向到log。
这会将stderr重定向到当前正在将stdout重定向到的任何位置,通常是控制台。然后将stdout重定向到log。请记住,stderr不会“遵循” stdout,因此它将继续重定向到控制台。
最终结果: stdout被重定向到日志文件,并且stderr被(仍然)发送到控制台。几乎可以肯定这不是您想要的。