Stdout

添加與“標準輸出”不同的“標準錯誤”的最初原因是什麼?

  • May 10, 2021

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
$

我聽說 Web 上某處有一個故事,這給出了實施這種分離的有趣原因。它涉及早期 Unix 用於(和 Unix 管道,我認為)的電腦化排版。我現在沒找到。

有人願意在此處連結該故事,將其與相關標籤相關聯並使其更容易找到嗎?

有史蒂夫 C.約翰遜 2013 年對此的描述,作為使用者,使用者抱怨照片排版和 - 瞧!— 兩天后問題得到解決。但道格拉斯麥克羅伊在四分之一個世紀前講述的故事略有不同。

在 McIlroy 的版本中,標準錯誤是 Ken Thompson 著名的通宵介紹 Unix 命令管道的自然結果。在管道之前的 Unix 世界中,錯誤將被發送到標準輸出被重定向到的文件的事實是“麻煩的”。但是在引入管道之後,這種行為“在將輸出發送到毫無戒心的程序時變得無法容忍”。麥克羅伊回憶說丹尼斯·里奇在第六版之後“不久”引入了標準錯誤機制最終糾正了這個問題。

此外,麥克羅伊當然已經在 Unix 中研究管道的想法很長一段時間了,到目前為止,包括至少 2 年期間的一些提議;比那早了五年發明了花園軟管的比喻。與管道流不同的單獨流的概念並沒有在短短幾天內神奇地從無到有出現。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/461267