Thompson shell

Thompson shell是歷史上第一個Unix shell,1971年由肯·湯普遜寫作出第一版並加入UNIX之中。它是一個簡單的命令列直譯器,但不能被用來執行指令稿(Shell script)。它的許多特徵影響了以後命令列介面的發展。至Version 7 Unix之後,被Bourne shell取代。

Thompson shell
原作者肯·湯普遜
首次發佈1971年 (1971)
程式語言C語言
作業系統Unix
類型Unix shell

Thompson shell使用的重導向命令「<」與「>」,以及管線化命令「|」影響到之後的Unix shellMS 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和其他系統的命令列(包括DOSOS/2Windows等)都支援這三個符號。

被替代

Thompson shell是按照極簡主義進行設計的,語法非常簡單,即使是不太複雜的「if」和「goto」也需要多條命令來實現。[1]在1975年Version 6 Unix發佈之際,這個shell已經無法滿足大多數編程任務的需要。

這時,PWB/UNIX的開發者,特別是約翰·馬沙英語John Mashey開始修改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. ^ 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. 

參見