Die kurze Antwort auf die Frage, warum die ursprüngliche sh-Shell nicht vorhanden sh
ist, lautet, dass es keine ursprüngliche sh gibt.
Na gut, es ist die Thompson-Shell . Version 1 enthielt einige der Funktionen, die wir heute kennen, insbesondere Umleitung und Pipes (siehe Dennis Ritchies Artikel zur frühen Unix-Geschichte ). In späteren Versionen wurden Funktionen wie Hintergrundausführung mit &
, Globbing (implementiert mit einem externen Programm) und einige Anführungszeichen hinzugefügt , es gab jedoch keine Variablen oder verschachtelten Kontrollstrukturen. Bedingungen und Schleifen wurden über externe Programme bereitgestellt if
(die eine Bedingung und einen Befehl als Argumente verwendeten) und goto
(die durch Ändern der Dateiposition ihres übergeordneten Elements in der Skriptdatei funktionierten).
1979 wurde in Unix V7 die Thompson-Shell /bin/sh
durch die Bourne-Shell ersetzt . Die erste Version enthielt bereits viele der Funktionen , die heute in Dash verfügbar sind, und nachfolgende Versionen führten viele weitere ein . Einige Jahre später kam die Korn-Shell mit einem wachsenden Funktionsumfang auf den Markt. Viele Unix-Varianten haben es unter dem Namen installiert ksh
.
Im Jahr 1992 hat POSIX ein Minimum an sh
Funktionen kodifiziert , das im Grunde Bourne plus ein paar Dinge war. Jedes System, das sich "Unix" nannte, musste mindestens diese Funktionen implementieren. Kommerzielle Unix-Systeme verwendeten normalerweise ksh als POSIX sh, aber einige (z. B. OSF / 1 ) hatten ihre eigenen.
Weder die Bourne-Shell noch die Korn-Shell waren bis vor kurzem Open Source. Als sich also Mitte der neunziger Jahre die Linux-Welt herausbildete, waren sie nicht verfügbar. /bin/sh
musste etwas anderes sein. Die meisten Linux-Distributionen entschieden sich für bash , eine Shell aus dem GNU-Projekt , die in Bezug auf die Skriptfunktionen eher zwischen Bourne und Korn liegt und viel besser ist als beide für die interaktive Verwendung. Die einzige brauchbare Alternative war pdksh ( „public domain Korn - Shell“), eine freie (jetzt eingestellt, aber das Leben auf als mksh , die sich aktiv entwickelt ), aber ich erinnere mich nicht eine Linux - Distribution mit pdksh als/bin/sh
Ich weiß nicht warum, ich schätze, weil Linux-Distributionen immer GNU / Linux-Distributionen waren und im Grunde genommen GNU-Versionen aller Tools lieferten, für die es eine GNU-Version gab.
Es gab auch einige Open-Source-Implementierungen mit dem sh
Namen "ash", insbesondere die Almquist-Shell , aber sie waren sehr unvollständig, da einige POSIX-Funktionen fehlten, die die Leute nutzen wollten. Ein Programmierer, der Debian-Betreuer Herbert Xu war , erweiterte ash, um es POSIX-konform zu machen. Schließlich wurde seine Version in dash umbenannt, und es gab einige Versuche, sie /bin/sh
in Debian anstelle von bash zu machen. Ubuntu begann, bevor Debian damit begann, Bashismen (die Verwendung bashspezifischer Funktionen in #!/bin/sh
Skripten) systematisch als Fehler zu behandeln . Beide wechselten später ( Ubuntu 6.10 , Debian erst 2009) ( es war ein Ziel für Lenny Der Wechsel erfolgte jedoch erst nach dem Lenny-Release, also im Squeeze)).
Ein wesentlicher Grund für die Verwendung Strich als eher als bash wie /bin/sh
ist , dass es deutlich schneller ist. Dies war besonders wichtig für Ubuntu, das von Anfang an versucht hat, die Bootzeiten kurz zu halten. Dash benötigt in der Regel auch weniger Speicher als bash. Dies ist besonders wichtig für Wrapper-Skripte, die beim Beenden des zugrunde liegenden Programms nur ein bisschen aufräumen müssen. Ein weiterer Vorteil von dash ist, dass es sich nur auf libc (die Kernsystembibliothek) stützt, wohingegen bash sich auch auf Terminal-Unterstützungsbibliotheken stützt (ohne diese kann es nicht gestartet werden, selbst wenn ein Skript ausgeführt wird). Dies bedeutet, dass Dash eine bessere Chance hat, an einem kaputten System weiterzuarbeiten.
Irgendwann im 21. Jahrhundert wurde die Korn-Shell Open Source und Open Source-Versionen der Bourne-Shell erschienen (alte Versionen, da die Entwicklung Jahre zuvor eingestellt worden war). Aber Dash und Bash waren zu fest in der Linux-Welt verankert, als dass sie sich durchgesetzt hätten, insbesondere die Bourne-Shell, deren Wert heute nur noch historisch ist. Dash hat bash verdrängt, weil es klare Vorteile hatte, aber keiner der anderen Konkurrenten hat einen entscheidenden Vorteil als /bin/sh
.