为什么有些程序在stderr上写而不是stdout它们的输出?

时间:2012-07-04 09:10:06

标签: io stdout stderr

我最近在.bashrc文件中添加了一个ssh-add命令。我找到了

ssh-add $HOME/.ssh/id_rsa_github > /dev/null

每次打开shell时,

都会显示“已添加标识和其他内容”的消息。

虽然

ssh-add $HOME/.ssh/id_rsa_github > /dev/null 2>&1

做了诀窍,我的shell现在'干净'。

在互联网上阅读,我发现其他命令就是这样做的(例如time)。你能解释一下为什么要这样做吗?

1 个答案:

答案 0 :(得分:0)

将输出从一个进程重定向到另一个进程时,例如通过管道

$ procA | procB | procC

这是使用stdout传统完成的。我希望time和类似命令输出到stderr以避免破坏此流。如果您正在使用时间,那么您正在诊断问题,并且您不希望无意中为下游流程提供额外的输入。

This article包含一些进一步的细节以及围绕此事的一些历史。