Warum ist Bash die Standard-Shell in den meisten Betriebssystemen?


38

Warum ist Bash die Standard-Shell in den meisten Betriebssystemen (Ubuntu, Fedora, OSX usw.)? Warum verwenden viele fortgeschrittene Benutzer meistens zsh? Wenn es so gut ist, warum ist es nicht die Standardeinstellung?

Ich benutze beide Ich sehe keinen Unterschied, alle meine Aufgaben sind einfach :)


5
Alles ist eine Gaußsche Kurve: Wenn es stimmt, dass die meisten fortgeschrittenen Benutzer es verwenden ksh, dann ist es auch so, dass die meisten Leute eine andere Shell verwenden, und dies allein würde erklären, warum kshnicht die Standard-Shell ist. Ich glaube jedoch nicht, dass dies der Grund ist. Warten wir auf eine Killer-Antwort, von der ich sicher bin, dass sie diese Frage erhalten wird.
Kos

1
Eigentlich glaube ich, Ubuntu verwendet Dash als Standard-Shell ...
Bakuriu

1
Dies hat eine gute Antwort, ich stimme ab, wir lassen es offen.
Seth

Antworten:


33

Ich habe etwas darüber gelesen und die Schlussfolgerung scheint zu sein, dass es sich um die Standard-Shell von GNU handelt (die von den meisten Linux-basierten Betriebssystemen verwendet wird) und daher einfach als Teil von GNU gepackt ist, während die Entwicklung 20 Jahre zurückliegt Stabil und abgerundet, ist es einfach der beste Allrounder und erfüllt die Anforderungen aller, außer der fortgeschrittensten Benutzer.

Weitere Informationen finden Sie unter Warum ist Bash Standard unter Linux? (die gleiche Frage unter Unix & Linux).

Um noch ein bisschen mehr hinzuzufügen, es gibt viele andere Shells, die Sie ausprobieren können. Wenn Sie interessiert sind, hier ein paar Beispiele aus dieser Antwort :

  • 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 Bearbeitungsfunktionen für die Befehlszeile.

  • 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 wird) ist klein und schnell, 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 .


1
Wenn Sie etwas von einem anderen Ort kopieren und einfügen, sollten Sie deutlich darauf hinweisen, dass dies der Fall ist.
muru

1
@muru Ich habe den Link zum Originalbeitrag angegeben, aber ich verstehe, dass es klarer sein könnte.
Mark Kirby

Was ist die Quelle Ihres Kommentars, dass zsh einige Macken in Bezug auf Scripting hat? Egal, ich sehe, dass der Kommentar von woanders kam.
Scooter

1
Sie haben auch Fische (was mit der sh-Syntax nicht kompatibel ist).
Léo Lam

1
Würden Sie erklären, was an der Korn-Shell-Bearbeitung mangelhaft war? Es schien immer in Ordnung zu funktionieren, auch in den 90ern.
Jonathan Leffler

9

Die Bourne - Shell ( sh wieder in den Tag) der AT & T - Zweig von Unix wurde verbessert auf und von der Korn - Shell, superceded KSH . ksh stammt ebenfalls von AT & T Bell Labs und war keine GPL (aktuelle Version ist Eclipse Public License). Die C-Shell csh stammt aus der Berkeley-Version von Unix und war auch keine GPL (BSD-Lizenz) und verwendete auch eine andere Syntax als sh. Die Z-Shell, zsh, ist eine Verbesserung gegenüber sh, jedoch keine GPL (MIT-ähnliche Lizenz). Bash war eine Verbesserung von sh, verwendete die GPL und von GNU. Nur auf Lizenz allein wäre Bash wahrscheinlich die Wahl für ein GPL-Betriebssystem gewesen. Vor allem, wenn eine Muschel ein Kernstück einer Distribution ist.

Bash war aber auch ein GNU-Projekt, da es meiner Meinung nach aktiver entwickelt und Beiträge einfacher macht als ein Legacy-Produkt aus Berkeley Unix oder AT & T Unix. Ein sehr guter Fall könnte sein, dass zsh eine bessere Shell ist und war als Bash, aber nicht genug, um den unterschiedlichen Lizenz- und Nicht-GNU-Projektstatus zu überwinden.

Als Linux-Distributionen zum ersten Mal auftauchten und ihre Standard-Shell auswählten (Anfang bis Mitte der 90er Jahre), gab es weder einen Github (2008) noch eine SourceForge (1999). Zu diesem Zeitpunkt hatten GNU-Projekte meines Erachtens einen echten Vorteil gegenüber Nicht-GNU-Projekten, da sie wahrgenommen und gezeichnet wurden und neue Entwickler mit einbezogen wurden. Daher könnten Distributionen Z-Shell als besser ansehen, aber auch damit rechnen, dass Bash in Zukunft einen guten Support und eine gute Wartung erhält und dass weitere Funktionen hinzugefügt werden, die es ihm ermöglichen, zsh nachzuholen.

Jetzt, da Bash jahrelang den Standardstatus hatte, ist es zu einem Standard geworden, über den Bücher geschrieben wurden. Es gibt ein Buch, das sowohl Bash als auch Z-Shell behandelt , aber kein Buch, das es ausschließlich behandelt, während es mehrere gibt, die dies für Bash tun.

Und zu diesem Zeitpunkt, wenn Distributionen die Standardeinstellungen für Upgrades eines vorhandenen Systems ändern würden, würden Setups unterbrochen, da einige der Initialisierungsdateien unterschiedliche Namen haben (z. B. .bashrc versus .zshrc) und der Inhalt der Dateien möglicherweise eine inkompatible Syntax aufweist. Daher würden sie dies nur sehr ungern tun und neue Downloads mit zsh als Standard und Upgrades mit bash belassen. Zwei verschiedene Standardeinstellungen für dieselbe Distribution möchten sie wahrscheinlich nicht unterstützen, und Benutzer / Unternehmen möchten sich auch nicht damit befassen.


1

Die Unix-Shell-Sprachen sind alle hässlich. Einige besonders ( csh), andere vielleicht etwas weniger ( ksh? Ich weiß es eigentlich nicht), aber wenn es um Aspekte wie Lesbarkeit und Strenge bei großen Projekten geht, kann keiner von ihnen an gut gestaltete Mehrzwecksprachen wie z Python, C # oder Haskell. Wenn Sie also etwas Festes wollen, werden Sie nie einen der Schalengeschmacksrichtungen wählen.

Sie wählen sie, wenn Sie einfache Aufgaben schnell erledigen möchten. Dafür benötigen Sie:

  • Kurze Syntax und genügend Konsistenz, damit Sie sie sich merken können (es ist schwierig, nach Kurzoperatoren zu suchen). Es ist sehr wichtig, ob deine Shell überall installiert ist, denn du würdest dir wirklich lieber nicht mehr als eines dieser Kludge-Monster merken.
  • Gute interaktive Funktionen, so dass Sie sich direkt in das Terminal hacken und Dinge zum Laufen bringen können, ohne zwischen mehreren Skriptdateien wechseln zu müssen.
  • Die Fähigkeit, jedes Skript-Snippet von überall zu greifen und es einfach funktionieren zu lassen. shKompatibilität ist hier ein großes Plus, und je beliebter, desto besser.

Wie Sie sehen, ist die Popularität in diesen Shell-Sprachen eher ein wichtiger Punkt als in Allzwecksprachen. Selbst wenn kshes als Sprache an sich ein bisschen „besser“ ist, ist es weniger ratsam, sie zu verwenden, wenn sie bashnur ein bisschen populärer ist (was in dem relevanten Sektor der Fall war, da sie zuerst als Standard gewählt wurde) für GNU).

Die Leute, die den Wechsel vornehmen, sind überlegt und erfahren genug, um problemlos zu ihrer Lieblingsshell zu wechseln. OTOH, ein Anfänger, der gezwungen ist, mit einer weniger populären Shell zu arbeiten, wird schnell verwirrt sein, wenn er das Internet nach etwas fragt und es nicht funktioniert. Daher ist jede Distribution, die sich nicht nur an Unix-Veteranen richtet, mit einem gewissen Risiko verbunden, wenn sie etwas anderes als bashden Standard darstellt - ein Schritt, von dem nur relativ wenige Menschen (und nur wenig) profitieren würden.


1
Jede Sprache, die sich um Whitespace kümmert, ist nicht "gut gestaltet", aber ich stimme zu, dass Popularität der Schlüssel ist.
Nagora

1
@ Nagora: Meinungen variieren. FWIW, Sie können Haskell immer mit geschweiften Klammern und Semikolons anstelle von Leerzeichen schreiben, und ich nehme an, dass Python ähnliche Fallbacks hat. Nur, niemand tut dies, weil einrückungsbasierte Gruppierung für die Lesbarkeit einfach erstaunlich ist.
Linksabfahrt am

1
  1. Es war da, als es gebraucht wurde
  2. Es hat genug Augenweide, dass Anfänger eine Woche damit verbringen können, ihre Eingabeaufforderung anzupassen.
  3. Die gängigen Anwendungsfälle sind ausreichend (am häufigsten wird ein einzelner Befehl gestartet).
  4. Wo es nicht gut genug ist, können Perl, Python und Lua die Lücke schließen.
  5. Perl macht eine schreckliche interaktive Shell
  6. Obwohl fish, ksh oder zsh theoretisch eine bessere Shell sein mögen, gibt es für mich nicht genug Verbesserungen, wenn Perl so gut funktioniert, oder wenn Portabilität ein Problem ist, ziele ich trotzdem auf Dash ab.

0

"Critical Mass" ist die Hauptantwort, IMO. Bash ist nicht nur für die Befehlszeilen-Arbeit gedacht, sondern auch für die Skripterstellung. Es gibt eine riesige Anzahl von Bash-Skripten. Egal, wie viel besser eine Alternative für die Interaktion ist, die Notwendigkeit, diese Skripte einfach "plug and play" zu können, überwiegt diese Vorteile. Als solche ist die einzige Shell, die Bash jetzt realistisch vom Platz nehmen kann, eine, die vollständig abwärtskompatibel ist, und der wahrscheinlichste Kandidat dafür ist ... die nächste Version von Bash.


1
Sie können beliebige und alle Bash-Skripte verwenden, unabhängig davon, wie Ihre Standard-Shell lautet. Das ist es, was der She-Bang (#! / Bin / bash) oben im Skript bedeutet.
Panther

1
@ bodhi.zazen Solange die Bash-Shell im System vorhanden ist. Ich kenne mindestens eine Version von Solaris, die kein Bash enthält.
Tulains Córdova

@ bodhi.zazen Das Umschalten zwischen zwei Shells - eine für die Interaktion und eine für die Skripterstellung - ist mit einem hohen Kosten verbunden. Die Mühe lohnt sich im Allgemeinen nicht.
Nagora

1
@Nagora Was kostet das Ausführen eines Skripts im Kopf ?
Kos

@kos wenn du buchstäblich nur Skripte ausführst, keine. Wenn Sie Skripte pflegen und anpassen müssen, müssen Sie häufig recht kleine Unterschiede zwischen den verschiedenen zugrunde liegenden Shells berücksichtigen. In diesem Fall entstehen fortlaufende Metallkosten und Kosten für den Kontextwechsel, wenn Sie einige Arbeiten im ausführen müssen "andere" Syntax.
Nagora
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.