在文件上运行dos2unix时,我将以下内容打印到终端
dos2unix: converting file <filename> to UNIX format ...
Run Code Online (Sandbox Code Playgroud)
在我尝试通过将输出发送到/ dev/null来抑制输出时,我注意到这是在stderr而不是stdout发出的,因为我预期(因为它看起来像是正常的消息,而不是错误).是否有一个原因?
没有理由,但通常stderr不仅仅是错误输出.它是另一个经常用于记录或信息性消息的流.由于未输出日志消息,因此不会将stdout其发送到程序的结果.
它打印在你的终端上的原因是你的shell的结果,并没有真正受到应用程序的控制.
在类Unix环境中,链式流程很常见:一个程序的结果用作另一个程序的输入.将结果与诊断混合会混淆下一个处理阶段.它还会隐藏来自观看终端的潜在用户的诊断,其中处理结果通过管道输送到下一个节目.
这就是在stdout和stderr中分离结果和诊断的原因.诊断不仅限于错误,还应包含所有不是后续程序所期望的处理结果的内容.
关于实际问题:dos2unix经常用于原位转换文件,但也可以输出到stdout(当没有文件名调用时,它从stdin读取并输出到stdout).然后stdout可以独立于stderr重定向.考虑cat blados | dos2unix > blaunix.您仍会看到诊断(可能包含错误消息!),但处理结果将转至blaunix.
在成功的情况下打印诊断并不常见 - 可能对DOS用户有点点头.如果处理结果包含信息性消息,那将是非常糟糕的; 例如,它会破坏C文件.
Try dos2unix -q <filename>
Run Code Online (Sandbox Code Playgroud)
-q, --quiet 安静模式。禁止所有警告和消息。返回值为零。除非使用了错误的命令行选项。
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |