首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmd 2>&1 >日志vs cmd >日志2>&1

cmd 2>&1 >日志vs cmd >日志2>&1
EN

Stack Overflow用户
提问于 2011-01-15 21:21:51
回答 2查看 53.9K关注 0票数 31

它们之间的区别是什么:

代码语言:javascript
复制
cmd > log 2>&1

代码语言:javascript
复制
cmd 2>&1 > log

其中cmd是命令?

我应该选择哪一个?为什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-17 07:25:40

顺序很重要。关于重定向的推理方法是从左到右阅读它们,并意识到重定向使流指向同一位置。它们不会使流相互指向。

那是什么意思?如果您说2>&1,那么您将把stderr重定向到当前stdout所重定向的位置。如果stdout要转到控制台,那么stderr也是。如果stdout要写入一个文件,那么stderr也是如此。如果您随后重定向标准输出,则标准错误仍然指向标准输出使用指向的内容。它不会“跟随”stdout到新的位置。

正确的

代码语言:javascript
复制
cmd > log 2>&1

这会将标准输出重定向到log,然后将标准错误重定向到现在重定向标准输出的位置,即log

最终结果:标准输出和标准错误都被重定向到log

不对

代码语言:javascript
复制
cmd 2>&1 > log

这会将stderr重定向到当前正在重定向stdout的任何位置,通常是控制台。然后将标准输出重定向到log。请记住,stderr并不“遵循”stdout,因此它会继续重定向到控制台。

最终结果:将标准输出重定向到日志文件,并(仍然)将标准错误发送到控制台。这几乎肯定不是您想要的。

票数 80
EN

Stack Overflow用户

发布于 2011-01-15 21:35:23

代码语言:javascript
复制
cmd > log 2>&1

STDOUT重定向到日志,然后用重定向的STDOUT替换STDERR

代码语言:javascript
复制
cmd 2>&1 > log

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4699790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档