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



