它们之间的区别是什么:
cmd > log 2>&1和
cmd 2>&1 > log其中cmd是命令?
我应该选择哪一个?为什么?
发布于 2011-01-17 07:25:40
顺序很重要。关于重定向的推理方法是从左到右阅读它们,并意识到重定向使流指向同一位置。它们不会使流相互指向。
那是什么意思?如果您说2>&1,那么您将把stderr重定向到当前stdout所重定向的位置。如果stdout要转到控制台,那么stderr也是。如果stdout要写入一个文件,那么stderr也是如此。如果您随后重定向标准输出,则标准错误仍然指向标准输出使用指向的内容。它不会“跟随”stdout到新的位置。
正确的
cmd > log 2>&1这会将标准输出重定向到log,然后将标准错误重定向到现在重定向标准输出的位置,即log。
最终结果:标准输出和标准错误都被重定向到log。
不对
cmd 2>&1 > log这会将stderr重定向到当前正在重定向stdout的任何位置,通常是控制台。然后将标准输出重定向到log。请记住,stderr并不“遵循”stdout,因此它会继续重定向到控制台。
最终结果:将标准输出重定向到日志文件,并(仍然)将标准错误发送到控制台。这几乎肯定不是您想要的。
发布于 2011-01-15 21:35:23
cmd > log 2>&1将STDOUT重定向到日志,然后用重定向的STDOUT替换STDERR。
cmd 2>&1 > log将STDERR替换为STDOUT,然后将原始STDOUT重定向到日志。
https://stackoverflow.com/questions/4699790
复制相似问题