# Thompson-Shell

Der mit UNIX ab 1969 entwickelte Kommandozeileninterpreter sh wird retronym nach dessen Entwickler Ken Thompson als Thompson-Shell bezeichnet. Ursprünglich in Assembler geschrieben, wurde die originale Unix-Shell 1973 gemeinsam mit UNIX Version 4 in C neu implementiert.
Die Thompson-Shell ist eine erste, sehr rudimentäre Variante einer Unix-Shell, jedoch gehen viele spätere, verbesserte und erweiterte Unix-Shells auf sie zurück. Auf modernen Unix- und Unix-artigen Systemen wird sie nicht mehr verwendet, allerdings wurde die letzte Version für moderne Systeme reimplementiert.

## Geschichte

UNICS, wie das System 1969 als Wortwitz und Anspielung auf das frühere Betriebssystemprojekt Multics genannt wurde, bediente sich an einigen der Konzepte von Multics, an dem einige spätere Unixentwickler wie Ken Thompson, Doug McIlroy, Dennis Ritchie und Joseph Ossanna kurze Zeit mitgearbeitet hatten. Eines davon war die Shell. So bestand UNIX – die Schreibweise wurde spätestens 1971 mit der Veröffentlichung der ersten Version verwendet – neben dem Kernel im Weiteren aus den Kernbestandteilen Unix-Dateisystem und Unix-Shell. Bereits 1972 wurde das Befehls- und Filterketten-Konzept (pipes) von Doug McIlroy in dieser Shell realisiert.
Die Thompson-Shell (sh) war bis zur Veröffentlichung von V7 UNIX (1979) die Standard-Shell von AT&T-UNIX. Bereits in den 1970er Jahren wurde von Stephen R. Bourne eine verbesserte Unix-Shell entwickelt, die ab V7 UNIX die Thompson-Shell ablöste. Die Bourne-Shell wird ebenfalls mit sh ausgeführt. Doch auch weitere, spätere, modernere Unix-Shells verwenden neben dem ausführbaren Dateinamen die von der Thompson-Shell eingeführte Syntax; unter anderem die Verwendung von Größer- und Kleiner-Zeichen für Umleitungen von Eingaben und Ausgaben wurden zuerst in der Thompson-Shell verwendet.

## Merkmale

Die Thompson-Shell verfügt über die Kerneigenschaften einer Unix-Shell:
* Befehls- bzw. Filterketten (Pipes, „Rohrleitungen“)
* Umleitung von Programmeingaben und -ausgaben
* Zusammenfassungen von Befehlen bzw. Befehlsketten in Befehls-Dateien (Shell-Skripten)
Im Unterschied zu moderneren Unix-Shells, die Befehlsinterpreter und Programmiersprachen sind, verfügt die Thompson-Shell über keine eigenen Programmierkonstrukte. Die Anweisungen if und goto sind als separate Befehle implementiert, mit denen zwar bestimmte Programmieraufgaben (bedingte Steuerungen des Programmablaufs) gelöst werden können, aber es fehlt die Möglichkeit Variablen zu vereinbaren. Dem Befehlsinterpreter können jedoch mehrere Argumente übergeben werden, womit sich indirekt die Funktion von Variablen durch Aufrufe neuer Shell-Instanzen simulieren lässt.

## Reimplementierung

Als osh wurde die Thompson-Shell für moderne Unix-artige Betriebssysteme reimplementiert. Die Bezeichnung kommt von englisch old shell, „alte Shell“. Deren Nachfolger ist mit etsh die enhanced Thompson shell. In beiden lassen sich im Unterschied zur originalen Thompson-Shell aus den frühen 1970er Jahren Umgebungsvariablen direkt setzen; auch lesen die Reimplementierungen bei der Nutzung als primäre Shell eine vom Anwender verwaltete Profildatei, z. B. zum Setzen von Pfadinformationen.