GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist Bash überall (in den meisten, wenn nicht allen Linux-Distributionen)?

Geschichte (erworben nicht durch Forschung, sondern durch viel zu viel Zeit mit den Leuten von Bell Labs verbracht):

  1. Am Anfang (wenn man den Anfang als Unix Version 7 betrachtet) war die Bourne-Shell. Steve Bourne war der erste, der zeigte, dass die Shell, die die Interaktion des Benutzers steuerte, ein Benutzerprogramm und kein spezieller Teil des Betriebssystems sein könnte. Ein historischer Durchbruch. Die Shell selbst war für die Skripterstellung relativ sauber, hatte aber keine Befehlszeilenbearbeitung oder Jobsteuerung. Bournes Einführung in die Unix-Shell ist auch heute noch für Anfänger nützlich.

    Bearbeiten :Ich habe etwas "Vorgeschichte" von Ken Thompson und John Mashey, auch von Multics, ignoriert. Ich bin sicher, Bourne war sich all dieser Arbeiten bewusst (er war im selben Labor, 1127, bei Bell Labs), aber Bournes Shell war endgültig, und die früheren Arbeiten hatten wenig Einfluss, außer wie sie von Steve Bourne interpretiert wurden. Zum Beispiel, obwohl Ken später den C-Compiler für Plan 9 schrieb und großen Einfluss auf Plan 9 hatte, erwähnt Tom Duffs Artikel über die Shell von Plan 9 (rc) nur die Shell von Bourne, nicht die von Thompson.

  2. Die Shell ist nur ein Benutzerprogramm, also kann jeder eines schreiben. Als Version 7 Unix in New Jersey erstellt wurde, wurde Berkeley Unix in Kalifornien erstellt. Bill Joy in Berkeley schrieb csh , die C-Shell. Joy fügte Jobkontrolle und Verlauf und später die Befehlszeilenbearbeitung hinzu, war sich Bournes Arbeit jedoch nicht bewusst und stützte seine Sprache daher auf die Thompson-Shell (die ich im vorherigen Punkt als "prähistorisch" betrachtete). Die Unix-Gemeinschaft liebte Jobkontrolle, aber sie liebte auch Bournes Sprache. Eine nicht besonders gute Polemik gegen die csh-Sprache finden Sie unter Csh Programming Considered Harmful. Eine Zeitlang verwendeten viele Leute csh interaktiv für seine Auftragssteuerungs- und Verlaufsfunktionen, aber verwendet sh von Bourne Skripte zu schreiben. Diese Situation war alles andere als ideal.

    Bearbeiten :Danke an DigitalRoss für die Klärung der Chronologie von csh . Da ich meine Ausbildung von Leuten erhielt, die BSD als „Berkeley-Häresie“ bezeichnen, fehlten mir dort ziemlich die Fakten.

  3. Dave Korn von Bell Labs hat die Bourne-Shell brillant überarbeitet, um die Korn-Shell (ksh) zu produzieren. Es war vollständig abwärtskompatibel mit der Bourne-Shell sh sondern lieferte eine Schiffsladung unschätzbarer Verbesserungen. ksh wurde zur Grundlage eines POSIX-Standards und wurde standardmäßig mit Sun-Software ausgeliefert. (Dies trotz der Tatsache, dass Bill Joy Berkeley verließ, um bei der Gründung von Sun zu helfen, und einer ihrer führenden Software-Jungs war.)

  4. Bell Labs und AT&T scheitern dummerweise daran, ksh herzustellen Open Source. ksh88 ist weit verbreitet, aber es ist nicht legal, Quellen zu haben. Manche Menschen werden so süchtig, dass sie zu digitalen Kriminellen werden.

    Bearbeiten :War das wirklich so dumm? Schwer zu wissen. Berkeley verschenkte bereits Unix, und andere Unternehmen sollten bald folgen, aber dies war noch die Ära, in der die Corporate Masters daran glaubten, Gebühren für Unix zu erheben. Aber die Ergebnisse:AT&T Unix ist tot, nachdem es unzählige Male an verschiedene Parteien verkauft wurde. BSD und seine Abkömmlinge leben und sind wohlauf, aber diese aufstrebenden Dinger namens "Linux" und "GNU" haben einen riesigen Anteil an Gedanken, die einst Bell Labs gehörten.

  5. Die Free Software Foundation führt eine "Reinraum"-Implementierung einer POSIX-Shell von Grund auf durch, wobei sie alle Ideen von Dave Korn in der damals aktuellen Form übernimmt und im üblichen FSF-Stil eigene neue Funktionen hinzufügt, wie z. B. programmierbare Vervollständigung. Sie nennen es die "Bourne again"-Shell oder bash .

  6. Mitte der 1990er veröffentlichte AT&T ksh93 als Open Source , aber bis dahin ist es für eine breite Einführung zu spät. Die Lizenzvereinbarung ist seltsamerweise nicht standardisiert. bash und ksh divergieren und ksh erreicht niemals einen Marktanteil, der seinem Platz in der Geschichte entspricht.

Lektionen:

  • Das erste adäquate Produkt auf dem Markt gewinnt (sh).

  • Die Leute lieben neue Funktionen (Auftragssteuerung, Befehlsvervollständigung), aber sie lieben sie noch mehr, wenn ihre alten Skripte weiterhin funktionieren.

  • Bearbeiten :Ingenieursprofessoren sollten die Geschichte den Wissenschaftshistorikern überlassen :-)


Bash hat zwei völlig verschiedene Dinge zu bieten.

  1. Es ist eine feine Schale. Es ist eine von vielleicht 2 Shells (die andere ist zsh), die einige der coolen csh integrieren Funktionen wie ! History-Ersetzung in die Posix-Syntax. Es hat viele Erweiterungen, einschließlich Arrays.

  2. Es ist die FSF/GNU-Shell. In der Open-Source-Welt verleiht ihm das eine Art Gütesiegel.

Ich sollte auch hinzufügen, dass dies nicht immer die Standardeinstellung ist. ash wird oft als /bin/sh verwendet, so dass während bash kann die interaktive Shell ash sein ist die Shell "Einfach die Befehlsdatei ausführen". Das liegt daran, dass ash ist kleiner und schneller und enthält die Posix-Features, also ist es eine richtige Teilmenge. Mit ash als interaktive Shell ist manchmal problematisch. Auf, sagen wir, NetBSD funktioniert es gut, weil es dort mit allen Features gebaut wurde. Es ist eine Art ihre eine Hülle, während bash ist ein externes Paket. Aber unter Linux ash wird normalerweise als nicht interaktiv angesehen, also kompilieren sie es ohne die Historie und ohne die (wichtige) Zeilenbearbeitung auf der Theorie, dass es nur verwendet wird, um diese riesigen gnu configure auszuführen Skripte.

Geschichte von zwei Muscheln

Die wahre Geschichte der Shell

AKTUALISIERUNG: Es gibt eine ungenaue Geschichte, dass die Shell von Ort zu Ort im Internet kopiert wurde, und die Leute glauben es verständlicherweise. Ich werde versuchen, eine genaue Version zu geben und ein paar Links zur Verfügung stellen, um sie hier zu untermauern.

  1. Die erste Shell war mit Sicherheit nicht die Bourne-Shell, sondern wurde von Ken Thompson selbst geschrieben und in V6 vertrieben, der Version, die AT&T an verschiedene Universitäten und Regierungslabors schickte. Das hat Unix auf die Landkarte gebracht. Es hatte alle Grundlagen, <, >, >>, |, & , aber es hatte einfach nur goto Steuersyntax über ein externes Programm, das auf der Standardeingabe gesucht hat. Damals gab es noch keine komplizierten Shell-Skripte. Spätere Shells würden die Befehlseingabe auf einem separaten fd öffnen. Es mag heute einfach aussehen, aber in den Horrorfilmen der 1970er Jahre war es das Beste auf der Welt. Ob Sie es glauben oder nicht, diese alte Muschel hat heute einen eigenen Twitter-Stream und natürlich eine Homepage.
  2. Die zweite Shell war csh , geschrieben (wie vi ) von Bill Joy bei UCB. Das war vor GNU readline und NetBSD editline, also muss es vollkommen vernünftig erschienen sein, Geschichte mit ! zu machen Syntax. Csh fügte die meisten der heutigen Shell-Funktionen hinzu, jedoch mit csh-Syntax. csh hat keine Syntax geändert , unentgeltlich oder anderweitig. Es war tatsächlich rückwärtskompatibel zur Thompson-Shell und enthielt ursprünglich den TS-Quellcode.
  3. Die dritte Shell war die Bourne-Shell mit einer anderen Syntax. Unix wurde parallel bei UCB und AT&T entwickelt. Diese Shell hatte eine seltsame Speicherzuweisung (ich glaube, sie hat einfach mehr Speicher verbraucht, SIGSEGV abgefangen, ein neues brk(2) ausgeführt und es dann erneut versucht), die es schwierig machte, auf neuen Unix-Ports zu laufen, also osh und csh blieb einige Zeit beliebt. Es gab kein Internet und es war lizenzierte SW, also ist es in dieser Umgebung möglich, dass Stephen Bourne nichts über Joys Shell wusste und Joy wusste sicherlich nichts über Bourne. Es ist möglich, dass sich die beiden Shells zum ersten Mal trafen, als UCB ein VAX und eine Vorabversion des inzwischen vergessenen Unix/32V erhielt. Ich erinnere mich, dass Bill sich über die Speicherzuweisung beschwert hat. Beachten Sie, dass beide Shells abwärtskompatibel zur V6-Shell waren , sie haben einfach die Syntax in verschiedene Richtungen erweitert.
  4. Nun gab es tatsächlich mehrere inkompatible Shells, zu denen AT&T den Bourne-kompatiblen ksh hinzufügte . Schließlich csh hatte einen halbwegs verfügbaren Quellcode, war aber in einen Rechtsstreit zwischen AT&T und der University of California verwickelt. Dennoch waren dies die glorreichen Tage von BSD Unix, als anspruchsvolle Unternehmen, die sich die Gebühr von 50.000 Dollar leisten konnten, die AT&T-Lizenz kauften, aber die 4.x-BSD-Distributionen installierten, und die Universitäten sie kostenlos erhielten.
  5. In dieser Situation mit vielen rechtlichen und technischen Problemen wurden verschiedene unabhängige Implementierungen durchgeführt. Mindestens genauso viele gingen mit dem csh Syntax wie bei der Bourne-Shell-Syntax, und einige haben die beiden zusammengeführt. Sie hatten mindestens tcsh , zsh , bash , und ash . Die Bourne-Syntax war "offiziell", da sie Teil von AT&T-Veröffentlichungen war, aber damals war BSD ziemlich wichtig, und Sun, ursprünglich BSD, verteilte eine beträchtliche Menge der Unix-SW, die der Welt begegnete.
  6. Teilweise wegen der USL-Klage hatten die FSF und Linux ein offenes Feld. In der Zwischenzeit hatte AT&T es geschafft, einen Kampf mit einem der wenigen Unternehmen auf der Erde zu beginnen, das größer war als sie selbst (der Staat Kalifornien), und am Ende gewannen sie den Prozess nicht, und so war die BSD-Distribution schließlich legal Fundament. Aber damals waren Linux und Bash allgegenwärtig, und so ist BSD heute eine Nische.
  7. Schließlich ist bash eine gute Shell (obwohl sie anscheinend von ihrem ursprünglichen Autor privat verleugnet wird) und sie verdient voll und ganz die Anerkennung für ihren eigenen Erfolg. csh wäre von tcsh und zsh in den Schatten gestellt worden, selbst wenn ash, bash und ksh den Syntaxkrieg nicht gewonnen hätten.

Um das zu ergänzen, was @DigitalRoss gesagt hat

  • Bash ist ein vollständiger Superset-Ersatz für posix-sh, sogar bis zu dem Punkt, wenn es als /bin/sh aufgerufen wird, posix-sh vollständig emuliert. Posix-sh war der "Standard" für kommerzielle Unix-Systeme als gemeinsame Nenner-Shell. Also, etwas, das dort anfängt und darauf aufbaut, beginnt mit viel.

Linux
  1. Warum enthält die Bash-Übersetzungsdatei nicht alle Fehlertexte?

  2. Linux – Warum funktioniert Setuid nicht?

  3. Linux – Warum entfernt Apt Autoremove nicht alle alten Kernel-Pakete auf einmal?

  4. Linux – Warum behält Rsync unter Linux nicht alle Zeitstempel (Erstellungszeit) bei?

  5. Eine kurze Geschichte der Linux-/Open-Source-Distributionen

Warum ich von Mac zu Linux gewechselt bin

So verwenden Sie den Declare-Befehl in der Linux Bash Shell

So installieren Sie Linux Bash Shell unter Windows 10

Fehlerbehebung „Bash:Command Not Found“-Fehler in Linux

Warum fügt Strg + V nicht in Bash (Linux-Shell) ein?

Warum wird Perl bei den meisten Linux-Distributionen standardmäßig installiert?