Thompson Shell

Thompson Shell（トンプソン・シェル）は Unix シェルの元祖であり、ケン・トンプソンが開発して Unix の最初のバージョンに搭載された。これはシンプルなコマンドラインインタプリタであり、シェルスクリプト向きではなかったが、それにもかかわらずキャラクタ・ユーザインタフェースにいくつかの先進的な機能を導入し、後の Unix シェルの発展につながった。

歴史 
コマンドライン・インタプリタに「シェル」という名前をつけ、それを OS カーネル外のユーザ・インターフェースとして提供するというコンセプトは、Unix に先行して Multics から始まった。

Thompson Shell の初期の特徴として、コンパクトな入出力リダイレクト構文を挙げることができる。Multics では、コマンドラインで入出力リダイレクトを行なうには、それを開始・終了するために別々のコマンドを使う必要があった。一方 Unix ではコマンドに引数を追加するだけでよく、具体的には < FILENAME で入力元ファイル、> FILENAME で出力先ファイルの指定になり、それでコマンドの実行中はシェルが入出力をリダイレクトするようになる。この構文は、Unix の最初のバージョン（1971年）で既に実装されていた。

のちに追加されたものとして、パイプ機能がある。ダグラス・マキルロイの提案でリダイレクト構文は拡張され、あるコマンドの出力を、別のコマンドの入力として渡せるようになった。Version 3 のマニュアルによると、当初のパイプ構文は次のようなものだった。

 command1 >command2>

しかしこの構文は非常に紛らわしく、ファイル入出力のリダイレクトと混同しやすいことが分かった。Version 4 になると、パイプを表現するために | と ^ を使うよう改められた。

 command1 | command2

これは次のように入力しても同じである。

 command1 ^ command2

リダイレクトに < と >、パイプに | を使う Thompson Shell の構文は分かりやすく、他の殆どの Unix シェルで踏襲されたばかりでなく、Unix 以外の OS、特に MS-DOS、OS/2、Microsoft Windows のコマンドライン・シェルでも採用された。

衰退と代替 
Thompson Shell の設計は、Multics の模倣を意図したものだった。
プログラムの流れを制御するのに不可欠な if 文や goto 文も別のコマンドとして実装されていた。その結果、1975年に Version 6 Unix がリリースされる頃には、Thompson Shell は殆ど本格的プログラミング作業に不適切であることが明らかになりつつあった。

この頃、Programmer's Workbench UNIX ディストリビューションの開発者、特に John Mashey は、プログラミングに適したものにするために Thompson Shellを修正し始めた。または Mashey シェルとして知られるこのシェルは、より進んだフロー制御機構を含み、シェル変数を導入したが、Thompson シェルとの互換性の必要から制限が残っていた。

最終的に Thompson Shell はメインの Unix シェルの座を1979年に、Version 7 Unix では Bourne Shell に、2BSD では C Shell に、それぞれ明け渡すことになった。ほぼ全ての Unix 及び Unix 系システムが V7 から 2BSD へ移行して以降、Thompson Shell は一般にはもはや使われなくなった。しかし、いくつかの Ancient UNIX のソースの一部としてオープンソースとなっており入手は可能で、また歴史的資料として現在の Unix にも組み込めるようになっている。

脚注

外部リンク 
Manual page for the Thompson shell in Unix 1st Edition.
The Evolution of the Unix Time-Sharing System - describes the early development of the shell
Origins of the Bourne shell - manual pages for the 3rd, 4th, and 6th edition Thompson shells, and other resources on the early shells
Sixth Edition Thompson Shell Port - the Thompson shell and its associated utilities ported to modern Unix systems

Unixシェル
ケン・トンプソン