在文件上运行dos2unix时,会将以下内容打印到终端
dos2unix: converting file <filename> to UNIX format ...在试图通过将输出发送到/dev/null来抑制输出时,我注意到这是在stderr上发送的,而不是我所期望的stdout (因为它看起来是一条正常的消息,而不是错误)。这有什么原因吗?
发布于 2014-07-13 07:34:14
在类似Unix的环境中,链接进程是常见的:一个程序的结果被用作另一个程序的输入。将结果与诊断混合使用会混淆下一个处理阶段。它还将隐藏诊断信息,以防止潜在的用户观看终端,在那里处理被管道传送到下一个程序的结果不显示。
这就是在stdout和stderr中分离结果和诊断的原因。诊断不限于错误,而是应该包含所有不是后续程序所期望的处理结果的内容。
关于实际问题: dos2unix通常用于将文件转换为本地文件,但也可以输出到stdout (当调用时没有文件名,它从stdin读取并输出到stdout)。然后,stdout可以独立于stderr重定向。考虑一下cat blados | dos2unix > blaunix。您仍然会看到诊断信息(其中可能包含错误消息!),但是处理的结果将转到blaunix。
在成功的情况下,打印诊断信息并不常见--这可能是对DOS用户的一点赞赏。如果处理结果包含信息性消息,那将是非常糟糕的;例如,它会破坏一个C文件。
发布于 2014-07-13 07:26:47
没有任何理由,但通常情况下,stderr并不仅仅用于错误输出。它是另一个经常用于记录或信息消息的流。因为日志消息没有输出,所以它没有发送到stdout,这是为了程序的结果。
其打印在终端上的原因是外壳的结果,而不是真正由应用程序控制。
发布于 2016-08-30 01:38:58
Try dos2unix -q <filename>-q,--安静的安静模式。禁止所有警告和消息。返回值为零。除非使用了错误的命令行选项。
https://stackoverflow.com/questions/24720429
复制相似问题