3.2 Welche Shells gibt es?
sh
Ende der 70er-Jahre wurde mit der Unix-Version 7 von AT&T die erste Bourne-Shell (kurz sh) ausgeliefert. Diese Shell wurde in der Programmiersprache Algol 68 entwickelt und stellte bereits einige wichtige Funktionalitäten, etwa Pipes, sowie Ein- und Ausgabeumlenkung, zur Verfügung. Benannt wurde die Bourne-Shell nach ihrem Entwickler Stephen Bourne.
jsh
Die sogenannte »Job Shell« ist eine Weiterentwicklung der Bourne-Shell. Neu in dieser Shell waren die namensgebenden Jobs.
Jobs erlauben es (wie Sie später noch genau erfahren werden), Programme im Hintergrund ablaufen zu lassen, anzuhalten und später fortzusetzen.
csh
Neben der Bourne-Shell wurde in den ersten Jahren der BSD-Geschichte die C-Shell (csh) entwickelt. Ihr Entwickler war Bill Joy, ein BSD-Mitentwickler und Gründer von Sun Microsystems. Er war jedoch auch an diversen anderen wichtigen Projekten, etwa an der Weiterentwicklung der TCP/IP-Protokollfamilie beteiligt.
Die C-Shell wurde zum ersten Mal mit 4.1BSD publiziert.
Zu ihren populärsten Features zählen die Funktionalität als Interpreter einer eigenen Skriptsprache (die übrigens, wie der Name »C-Shell« wohl schon erahnen lässt, an die Syntax der Programmiersprache C angelehnt ist), die Kommando-History, die Job-Kontrolle und die interaktive Datei- und Benutzernamenerweiterung. <Weitere Informationen zur C-Shell finden Sie in [JoyA] von William Joy.>
Diese beiden Vertreter, also Bourne-Shell und C-Shell, stellen die beiden grundlegenden Shell-Varianten unter Unix-Systemen dar. Die meisten populären Folgeentwicklungen bauen entweder auf der C-Shell und ihrer Syntax oder auf der Bourne-Shell und deren Syntax auf. Es gibt zwar auch andere Shells, die ihre Syntax keiner der beiden Shells angepasst haben, etwa die Scheme-Shell (shsh), die an die Syntax der Programmiersprache Scheme angelehnt ist, doch sind diese praktisch bedeutungslos. Einige Weiterentwicklungen kombinieren auch die Features beider Shells.
tcsh
Die TENEX-C-Shell (tcsh) ist eine C-Shell-Weiterentwicklung von Christos Zoulas. Diese Shell bietet einige Verbesserungen in Sachen »Benutzerfreundlichkeit« gegenüber der eigentlichen C-Shell an.
ksh
Die von David Korn entwickelte Korn-Shell (ksh) basiert auf den Eigenschaften und der Syntax der Bourne-Shell. Allerdings übernimmt die Korn-Shell auch einige Features der C-Shell. Die Korn-Shell ist Bestandteil des POSIX-Standards und in der Version ksh93 seit März 2000 als Quelltext zu haben.
pdksh
Da die Korn-Shell jedoch nicht immer frei war, entwickelte man die Public Domain Korn-Shell (pdksh).
Diese Shell beinhaltet alle Funktionalitäten des ksh88-POSIX-Standards und wird unter OpenBSD als Standard-Shell verwendet.
ash
Die Almquist-Shell (ash) ist eine kleine, der Bourne-Shell ähnliche Shell und stellt unter einigen BSD-Derivaten die Standard-Shell dar.
dash
Die Debian Almquist-Shell (dash) basiert auf der NetBSD-Version der ash. Unter Debian wird die dash als Ersatz für die ash eingesetzt, und einige Distributionen verwenden die dash anstelle der langsameren bash für ihre Startskripts (etwa Ubuntu). In der Entwicklung der Hardened Linux Distribution benutzen wir die dash unter anderem als Skriptsprache für die automatische Generierung von Packages. Die dash ist wie die ash größtenteils Bourne-Shell-kompatibel.
bash
Die Bourne-Again-Shell, kurz bash, ist wie die meisten aktuellen Shells ein Open-Source-Projekt. <Die bash wird vom GNU-Projekt unter der GNU General Public License entwickelt.>
Die bash ist POSIX-Standard-konform und baut auf der Syntax der Bourne-Shell auf. Diese Shell beherrscht sowohl Features der Bourne- und Korn-Shell als auch solche der C-Shell. Die bash ist die Standard-Shell unter Linux-Systemen.
zsh
Ein wahrer Bolide unter den Unix-Shells ist die Z-Shell (zsh). Sie vereint die Features der bash, csh und tcsh. Sie bietet diverse individuelle Features wie die Nutzung der Bourne- und C-Shell-Syntax, die Möglichkeit, Themes zu verwenden, und sogar Module, wie etwa zftp <Hiermit ist es möglich, sich direkt in der Shell an einem FTP-Server anzumelden, Interprozesskommunikation mit den Dateien eines FTP-Servers (über Pipes) durchzuführen etc.>, zu laden. Näheres zu dieser Shell erfahren Sie in [Steph99A] und [Wendzel03A].