Thompson Shell(トンプソン・シェル)は Unix シェルの元祖であり、ケン・トンプソンが開発して Unix の最初のバージョンに搭載された[1]。これはシンプルなコマンドラインインタプリタであり、シェルスクリプト向きではなかったが、それにもかかわらずキャラクタ・ユーザインタフェースにいくつかの先進的な機能を導入し、後の 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
文も別のコマンドとして実装されていた[1]。その結果、1975年に Version 6 Unix がリリースされる頃には、Thompson Shell は殆ど本格的プログラミング作業に不適切であることが明らかになりつつあった。
この頃、Programmer's Workbench UNIX ディストリビューションの開発者、特に John Mashey は、プログラミングに適したものにするために Thompson Shellを修正し始めた[1]。PWB shell(英語版)または Mashey シェルとして知られるこのシェルは、より進んだフロー制御機構を含み、シェル変数を導入したが、Thompson シェルとの互換性の必要から制限が残っていた。
最終的に Thompson Shell はメインの Unix シェルの座を1979年に、Version 7 Unix では Bourne Shell に、2BSD では C Shell に、それぞれ明け渡すことになった。ほぼ全ての Unix 及び Unix 系システムが V7 から 2BSD へ移行して以降、Thompson Shell は一般にはもはや使われなくなった。しかし、いくつかの Ancient UNIX のソースの一部としてオープンソースとなっており入手は可能で、また歴史的資料として現在の Unix にも組み込めるようになっている。
脚注
- ^ a b c J. R. Mashey (1976-10-13). Using a Command Language as a High-Level Programming Language. Proceeding of the 2nd International Conference on Software Engineering. pp. pp.169–176.
外部リンク