首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么dos2unix要打印到stderr?

为什么dos2unix要打印到stderr?
EN

Stack Overflow用户
提问于 2014-07-13 07:22:18
回答 5查看 3.5K关注 0票数 9

在文件上运行dos2unix时,会将以下内容打印到终端

代码语言:javascript
复制
dos2unix: converting file <filename> to UNIX format ...

在试图通过将输出发送到/dev/null来抑制输出时,我注意到这是在stderr上发送的,而不是我所期望的stdout (因为它看起来是一条正常的消息,而不是错误)。这有什么原因吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-13 07:34:14

在类似Unix的环境中,链接进程是常见的:一个程序的结果被用作另一个程序的输入。将结果诊断混合使用会混淆下一个处理阶段。它还将隐藏诊断信息,以防止潜在的用户观看终端,在那里处理被管道传送到下一个程序的结果不显示。

这就是在stdout和stderr中分离结果和诊断的原因。诊断不限于错误,而是应该包含所有不是后续程序所期望的处理结果的内容。

关于实际问题: dos2unix通常用于将文件转换为本地文件,但也可以输出到stdout (当调用时没有文件名,它从stdin读取并输出到stdout)。然后,stdout可以独立于stderr重定向。考虑一下cat blados | dos2unix > blaunix。您仍然会看到诊断信息(其中可能包含错误消息!),但是处理的结果将转到blaunix。

在成功的情况下,打印诊断信息并不常见--这可能是对DOS用户的一点赞赏。如果处理结果包含信息性消息,那将是非常糟糕的;例如,它会破坏一个C文件。

票数 8
EN

Stack Overflow用户

发布于 2014-07-13 07:26:47

没有任何理由,但通常情况下,stderr并不仅仅用于错误输出。它是另一个经常用于记录或信息消息的流。因为日志消息没有输出,所以它没有发送到stdout,这是为了程序的结果。

其打印在终端上的原因是外壳的结果,而不是真正由应用程序控制。

票数 6
EN

Stack Overflow用户

发布于 2016-08-30 01:38:58

代码语言:javascript
复制
Try dos2unix -q <filename>

-q,--安静的安静模式。禁止所有警告和消息。返回值为零。除非使用了错误的命令行选项。

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

https://stackoverflow.com/questions/24720429

复制
相关文章

相似问题

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