Thompson shell

历史

“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”也需要多条命令来实现。在1975年Version 6 Unix发布之际，这个shell已经无法满足大多数编程任务的需要。
这时，PWB/UNIX的开发者，特别是约翰·马沙开始修改Thompson shell的源代码，使其更适合编程。修改之后的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系统中，作为历史展览而出现。