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 管道,我认为)。我现在找不到它。
有没有人想把这个故事链接到这里,将它与相关标签相关联并使其更容易找到?
Steve C. Johnson 在 2013 年对此进行了描述,作为用户,用户抱怨照片排版和 - 瞧!— 问题在两天后得到解决。但道格拉斯麦克罗伊在四分之一个世纪前讲述了这个故事。
在 McIlroy 的版本中,标准错误是 Ken Thompson 著名的通宵引入 Unix 命令管道的自然结果。在管道出现之前的 Unix 世界中,错误将被发送到标准输出被重定向到的文件这一事实是“麻烦的”。但是在引入管道之后,这种行为“当输出被发送到一个毫无戒心的进程时变得无法容忍”。麦克罗伊回忆说,丹尼斯·里奇引入了标准错误机制,最终在第六版之后“不久”纠正了这个问题。
此外,McIlroy 当然已经在 Unix 中研究管道的想法有一段时间了,到目前为止,包括至少 2 年期间的一些提案;比这早半年发明了花园软管的比喻。与管道流不同的单独流的概念并没有在短短几天内神奇地从无到有。