Warum ist Bash Standard unter Linux?

19

Die neuesten Linux-Distributionen enthalten bash als Standardshell, obwohl es andere (wohl) bessere Shells gibt.

Ich versuche zu verstehen, ob dies ein historisches Überbleibsel ist, das niemand ändern möchte, oder gibt es einige gute Gründe, die Bash zur ersten Wahl machen?

Milan Babuškov
quelle
19
Die meisten Computer werden mit installiertem MS Windows verkauft, obwohl andere, wahrscheinlich bessere Betriebssysteme verfügbar sind.
Choroba
Bash ist einfach. Es kann normalerweise alles tun, was der Benutzer möchte. Sie können es einfach wechseln. Es macht keinen Spaß, standardmäßig scsh zu haben.
CND
4
Bash ist eine OSS-Implementierung des UNIX-Standards /bin/sh, der Standard-Shell für 'normale' UNIX-es ...
Jan Marek
Ich weiß, dass dies ein Wiki-Link ist, aber er beantwortet Ihre Frage ausführlich: Was hat eine Shell als die andere? En.wikipedia.org/wiki/Unix_shell
whoami
6
Bitte definieren Sie (wohl) besser . Ich denke, es bashist die beste Shell, weil ich sie gut kenne und sie überall ist, alles, was ich brauche, kurz und relativ einfach ausführt, leicht lesbar ist und von Leuten verstanden werden kann, ohne zu wissen, wie man Bash-Skripte erstellt. Was willst du noch von einer Shell? Wenn Sie viele Programmierfunktionen wünschen, verwenden Sie eine Shell falsch.
Nicerobot

Antworten:

18

Die kurze Antwort ist, weil Linux wirklich GNU / Linux ist. Nur der Kernel ist Linux, aber die Basissammlung der Dienstprogramme, die die Unix-ähnliche Umgebung bereitstellen, wird von GNU bereitgestellt, und die GNU-Shell ist bash.
Wie gesagt, das ist die kurze Antwort;)

bearbeitet, um einige zusätzliche Kommentare hinzuzufügen ...
Lassen Sie mich vorab sagen, dass ich kein Unix-Historiker bin, also kann ich nur IMHO antworten

Ein paar Punkte, vor allem bash ist die Küchenspüle von Muscheln, wie Emacs für Redakteure ist.
Zum Zeitpunkt der Veröffentlichung von bash gab es keine freien ksh-Implementierungen, tcsh war ein freier csh-Ersatz, aber Stallman hatte eine Parole gegen csh für die Shell-Programmierung.
Als interaktive Shell hatte Bash einen hervorragenden Verlaufs- / Befehlsrückruf sowie das Speichern des Verlaufs von Sitzung zu Sitzung. Es war ein Rückgang im Ersatz für sh, bsh, ksh für die Shell-Programmierung und sorgte für eine anständige interaktive Shell.
Wie ein Schneeball, der bergab rollt, hat Bash an Dynamik und Größe gewonnen.

Ja, es gibt Dutzende anderer Muscheln; Muscheln, die besser für den individuellen Zweck oder Geschmack geeignet sind, aber für eine einzige Allround-Muschel-Bash gute Arbeit leisten und die seit über 20 Jahren viel im Auge behalten.

bsd
quelle
Ich verstehe. Die meisten Distributionen enthalten jedoch viele andere Nicht-GNU-Software. Es scheint mir, dass bash verwendet wird, nur weil es verwendet wird, genau wie choroba von Windows als dominantes Betriebssystem kommentiert. Windows hatte jedoch jahrzehntelang eine bessere Hardwareunterstützung (Treiber), die es schwierig machte, auf ein anderes Betriebssystem umzusteigen. Ich verstehe nicht, welche einzigartige Funktion Bash bietet, um zu verhindern, dass Benutzer wechseln?
Milan Babuškov
+1 und eine gute @bdowning für die kurze und einfache Antwort :-)
Nikhil Mulley
2
@ MilanBabuškov Bash muss installiert werden, da es zu viele Skripte gibt, die bashspezifische Funktionen verwenden. Wenn Sie von dieser Annahme ausgehen, müssen Sie zusätzliche Muscheln rechtfertigen. Dash wurde in Distributionen wie Ubuntu als Teil eines Plans zur Reduzierung der Bootzeiten aufgenommen. Angesichts der Tatsache, dass bash als interaktive Shell "gut genug" ist, hat noch keine andere Shell ein Argument angegeben, das stark genug ist, um Teil des Standard-Paket-Loadouts zu sein.
ssokolow
12

Bash hat einige potenzielle Konkurrenten:

  • Zsh hat fortgeschrittenere interaktive Funktionen, aber ein paar Macken, wenn es um Skripte geht (heute weniger als früher). Anfang bis Mitte der neunziger Jahre, als Linux noch in den Kinderschuhen steckte, war zsh praktisch unbekannt.
  • Ksh war seit Mitte der 1980er Jahre der De-facto-Standard für kommerzielle Unices, war jedoch bis zum Jahr 2000 proprietäre Software und daher unter Linux keine Option. Außerdem verfügte ksh im Vergleich zu bash über unterdurchschnittliche Funktionen für die Befehlszeilen-Edition.
  • Pdksh , ein kostenloser Klon von ksh, wäre eine Option gewesen, aber es war nicht bekannt und verfügte über schlechte Kommandozeilen-Editionsfähigkeiten. (Pdksh ist kein sehr aktives Projekt mehr, obwohl es in einigen BSDs noch verwendet wird, da ATT ksh jetzt kostenlos ist.)
  • Einige Distributionen installieren eine ash- Variante als /bin/sh. Ash (womit ich meine, dass jede der losen Muschelfamilien, Asche genannt, klein und schnell ist, ohne interaktive Funktionen (nur zum Bearbeiten von Skripten). Die Wiederbelebung der Asche ist relativ neu. In den neunziger Jahren fehlten den vorhandenen Varianten viele Funktionen.
  • Tcsh war die fortschrittlichste interaktive Shell, bis zsh auf den Markt kam, aber sie ist mit sh nicht kompatibel und mit Scripting nicht so gut .

Außerdem ist bash die offizielle GNU- Shell, und Linux-Systeme sind wirklich GNU / Linux : Viele der Kernprogramme stammen von GNU, auch wenn der bekannteste Teil, der Linux-Kernel, dies nicht tut. Zu der Zeit, als es zum De-facto-Standard wurde, war bash bekannt, hatte einen offiziellen Status und eine Reihe anständiger Funktionen.

Gilles 'SO - hör auf böse zu sein'
quelle
Soweit ich weiß, gibt der POSIX-Standard die erforderlichen Funktionen für die Bourne-Shell unter / bin / sh an. Die meisten Linux-Distributionen hängen von Shellskripten ab, die für die Verwendung der Bourne-Shell geschrieben wurden. BASH ist im Grunde genommen eine erweiterte Version der Bourne-Shell, und / bin / sh ist eigentlich eine Verknüpfung zu / bin / bash, die bei Ausführung nur mit den Funktionen der Bourne-Shell ausgeführt wird.
BGVAUGHAN
@bgvaughan Einige Distributionen versenden Bash as /bin/sh, andere Asche. Zum Beispiel Ubuntu /bin/shwurde dash(die Gabel von Asche gehalten von Debian) für eine Weile. Bash hat mehr Funktionen, Asche ist kleiner und schneller. Beide sind POSIX-konform (oder zumindest in der Praxis ausreichend konform).
Gilles 'SO- hör auf böse zu sein'
4

Einfachste Antwort? Weil etwas "muss" der Standard sein. Die vernünftigste Standardeinstellung ist die, mit der die meisten Benutzer bereits vertraut sind. In diesem Punkt ist Bash eine gute Wahl. Jeder hat die Freiheit zu wählen, welches in seiner Welt das Beste ist. Die meisten wählen die Standardeinstellung, wenn sie immer das getan hat, was sie brauchen.

BentFX
quelle
3

Von DOS kommend (mit installiertem Doskey) habe ich die Funktion zum Aufrufen der letzten Befehle durch einfaches Bewegen des Cursors nach oben / unten wirklich vermisst. BASH war IMO die erste Shell, die dies auf * nix implementiert hat.

Wahrscheinlich mochten die meisten Jungs ab dieser Generation Bash.

Nils
quelle
Obwohl ich bis in die 1990er Jahre keinen Computer benutzt hatte, ging ich davon aus, dass dies tcshdie erste * nix-Shell war, die mit den Pfeiltasten durch den Shell-Verlauf navigierte.
Anthony G - Gerechtigkeit für Monica
1

Alle anderen Antworten sind großartig, aber vom praktischen Standpunkt aus gesehen: Wenn ich mich vor ein unbekanntes System setze (oder von einem entfernten Standort aus darauf zugreifen kann) und etwas tun muss, kann ich mich darauf verlassen, dass bash auf allen außer den ältesten Systemen verfügbar ist. Ich kann einfach weitermachen und Dinge erledigen.

Wie in anderen Antworten und in Ihrer Frage erwähnt, gibt es viele andere Shells (ich höre viele gute Dinge über zsh, habe es aber nicht ausprobiert.), Aber sie variieren in Bezug auf die Syntax und manchmal die verwendeten Befehle Dinge erledigen. Wenn ich nur etwas erledigen will, ist bash schwierig genug, ohne mich an eine andere Shell anpassen zu müssen.

Wenn ich ein allgemein nützliches Shell-Skript schreibe, schreibe ich es für bash und weiß, dass es fast überall ausgeführt wird, wenn ich sehr vorsichtig bin, keine systemabhängigen Dinge zu tun.

Joe
quelle
1

Trägheit.

Bash war zufällig die am leichtesten verfügbare kostenlose Shell, als Linux-Systeme (GNU / Linux, wenn Sie es vorziehen) auftauchten. Die Tatsache, dass es aus dem GNU-Projekt stammt, hat nicht geschadet.

Was den Grund angeht, warum es immer noch die Standard-Shell ist, gab es nie einen Grund genug, sie zu ändern. Selbst wenn eine andere Shell besser ist, hat die Verwendung derselben Standard-Login-Shell für verschiedene Distributionen Vorteile, und es wäre schwierig, alle (Debian, Red Hat, Suse usw.) dazu zu bringen, auf etwas anderes umzusteigen.

Und schließlich ist es nur eine Voreinstellung. Jeder Benutzer kann chshdamit seine Login-Shell ändern. Es ist nicht erforderlich, die Standardeinstellung für alle Benutzer zu ändern.

Keith Thompson
quelle