Thompson-Shell

Der mit UNIX ab 1969 entwickelte Kommandozeileninterpreter sh wird retronym nach dessen Entwickler Ken Thompson als Thompson-Shell bezeichnet.[1] 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.

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.[2] Eines davon war die Shell.[3] 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.[4] 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.

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

[Bearbeiten | Quelltext bearbeiten]

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.

  • Ken Thompson: The UNIX Command Language. In: Structured Programming – International Computer State of the Art Report, Infotech Information Ltd. Maidenhead, Berkshire, 1975, S. 375–384.

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. University of Michigan (Hrsg.): Programmer's Journal. Band 5. Avant-Garde Creations, 1987, S. 16 (englisch, keine Vorschau verfügbar): “Ken Thompson, the father of Unix, wrote the very first rudimentary command interface for Ma Bell's OS—in typical researcher fashion calling it the Thompson shell.”
  2. Isrd: Basics Of Os Unix And Shell Programming. Tata McGraw-Hill Education, 2006, ISBN 978-0-07-061681-3 (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “MULTICS exerted a strong influence on the new operating system. The basic file system organization, the idea of the shell as a user process, use of separate process for each command and similar other features were inherited from it.”
  3. Michael L. Scott: Programming Language Pragmatics. Morgan Kaufmann, 2009, ISBN 978-0-08-092299-7 (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “When work began on the groundbreaking Multics system in 1964, [Louis] Pouzin sketched the design of an extended command language, with quoting and argument-passing mechanisms, for which he coined the term “shell.””
  4. S.K. Bajpai: Introduction To Computers And C Programming. New Age International, 2007, ISBN 978-81-224-1379-3 (englisch, eingeschränkte Vorschau in der Google-Buchsuche): “UNIX … has basically following parts: Kernel …, Shell …, The file system …”