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. 

参见