Thompson shell
原作者 | 肯·湯普遜 |
---|---|
首次發布 | 1971年 |
編程語言 | C語言 |
操作系統 | Unix |
類型 | Unix shell |
Thompson shell是歷史上第一個Unix shell,1971年由肯·湯普遜寫作出第一版並加入UNIX之中。它是一個簡單的命令列直譯器,但不能被用來執行指令稿(Shell script)。它的許多特徵影響了以後命令行界面的發展。至Version 7 Unix之後,被Bourne shell取代。
Thompson shell使用的重導向命令「<」與「>」,以及管線命令「|」影響到之後的Unix shell與MS DOS。
歷史
「shell」的名字和概念是從Unix的前身Multics發展過來的。應用程序通過shell來進行調用並被系統執行。
Thompson shell設計之初就為輸入和輸出重定向設計了簡單的語法。在設計Multics系統時,輸入輸出的重定向需要用特別的命令來表示重定向開始和重定向結束,而在Unix系統中,用戶只需要簡單地在命令後面附加一個「<」或「>」符號,再附上文件名,shell就可以在執行命令時處理輸入或輸出重定向。在1971年Unix發布第一個版本時,這個語法就已經被實現了。
後來又加入了管道的功能。在道格拉斯·麥克羅伊的建議下,重定向的功能被擴展,這樣一條命令的輸出就可以用作另一條命令的輸入。按照版本3手冊,管道功能最初的語法是:
command1 >command2>
這個語法語義比較含糊,容易分不清重定向的來源和目標——系統難以分清command2是一個命令還是一個文件。到了版本4,語法就被改為了「|」和「^」符號:
command1 | command2
這個語法等同於:
command1 ^ command2
而「>」符號被改成了:
command1 > file1
這條命令會把command1的輸出內容寫入到文件file1中。
從Thompson shell誕生的「<」、「>」和「|」產生了深遠的影響。絕大多數Unix shell和其他系統的命令行(包括DOS、OS/2、Windows等)都支持這三個符號。
被替代
Thompson shell是按照極簡主義進行設計的,語法非常簡單,即使是不太複雜的「if」和「goto」也需要多條命令來實現。[1]在1975年Version 6 Unix發布之際,這個shell已經無法滿足大多數編程任務的需要。
這時,PWB/UNIX的開發者,特別是約翰·馬沙開始修改Thompson shell的源代碼,使其更適合編程。[1]修改之後的shell被稱為PWB shell或Mashey shell,包括了高級的控制流,並引入了變量,但新功能也有所限制,以保證與Thompson shell的兼容性。
最終,在1978年,Version 7 Unix已經把默認的shell換成了Bourne shell,而1979年時2BSD把默認shell換成了C shell。因為所有現代Unix系統和類Unix系統都是從Version 7 Unix和2BSD繼承而來,所以Thompson shell基本上已經不再被使用。但是,Thompson shell作為Ancient UNIX系統的一部分,並且開放源代碼,它也被移植到了現代Unix系統中,作為歷史展覽而出現。
參考文獻
- ^ 1.0 1.1 J. R. Mashey. Using a Command Language as a High-Level Programming Language. Proceeding of the 2nd International Conference on Software Engineering: 169–176. 1976-10-13.