添加与“标准输出”分开的“标准错误”的原始原因是什么?

sou*_*edi 3 stdout stderr historical-unix

Unix 提供标准输出和标准错误,可以独立重定向。

$ ls /not-exist
ls: cannot access '/not-exist': No such file or directory

$ ls /not-exist > redirect.out
ls: cannot access '/not-exist': No such file or directory

$ ls /not-exist 2> redirect.err
$
Run Code Online (Sandbox Code Playgroud)

我听说网络上的某个地方有一个故事,它给出了实施这种分离的有趣原因。它涉及早期 Unix 用于的计算机排版(以及 Unix 管道,我认为)。我现在找不到它。

有没有人想把这个故事链接到这里,将它与相关标签相关联并使其更容易找到?

Jde*_*eBP 7

Steve C. Johnson 在 2013 年对此进行了描述,作为用户,用户抱怨照片排版和 - 瞧!— 问题在两天后得到解决。但道格拉斯麦克罗伊在四分之一个世纪前讲述了这个故事。

在 McIlroy 的版本中,标准错误是 Ken Thompson 著名的通宵引入 Unix 命令管道的自然结果。在管道出现之前的 Unix 世界中,错误将被发送到标准输出被重定向到的文件这一事实是“麻烦的”。但是在引入管道之后,这种行为“当输出被发送到一个毫无戒心的进程时变得无法容忍”。麦克罗伊回忆说,丹尼斯·里奇引入了标准错误机制,最终在第六版之后“不久”纠正了这个问题。

此外,McIlroy 当然已经在 Unix 中研究管道的想法有一段时间了,到目前为止,包括至少 2 年期间的一些提案;比这早半年发明了花园软管的比喻。与管道流不同的单独流的概念并没有在短短几天内神奇地从无到有。

进一步阅读