Was ist der Unterschied zwischen den Begriffen "Shell" und "Bash"?

11

Was ist der Unterschied zwischen "Shell" und "Bash" und was bedeuten diese Begriffe?

Soweit ich weiß, gibt es keinen Unterschied. Aber ich habe viele Bücher über "Shell" und andere über "Bash" gesehen!

Wenn ich also mit dem Terminal unter Mac OS X arbeiten und einige Bash-Skripte schreiben möchte, frage ich mich, für welche Art von Büchern ich mich entscheiden soll.

R.Hen
quelle
7
Es ist eine Unterscheidung zwischen Klasse und Instanz.
Kaz
1
Interessantes Lesematerial: unix.stackexchange.com/questions/4126/…
Bernhard
1
Die erste Shell wurde von einem Typen namens Bourne geschrieben. BASH ist eine Abkürzung für "Boune Again Shell". Es ist wichtig, Spaß zu haben!
Kinjal Dixit

Antworten:

31

Eine " Shell " ist eine Software, die eine Schnittstelle zu einem Betriebssystem bietet. Beispielsweise ist explorer.exe die Standard-Shell in Windows (obwohl es Alternativen gibt ) und bietet unter OS X Finder weitgehend die gleiche Funktionalität. Unter Linux / * nix kann die Shell Teil der Desktop-Umgebung sein (wie Gnome oder KDE ) oder eine separate Softwarekomponente (wie Unity oder Cinnamon ).

Bei den obigen Beispielen handelt es sich um grafische Shells, die eine Kombination aus Fenstern, Menüs, Symbolen und anderen derartigen Elementen verwenden, um eine grafische Benutzeroberfläche (GUI) bereitzustellen, mit der über den Mauszeiger interagiert werden kann. Im Zusammenhang mit Software wie Bash oder dem Schreiben von Skripten wird unter "Shell" normalerweise ein Befehlszeileninterpreter verstanden, der weitgehend dieselben Aufgaben wie eine grafische Shell ausführt, außer dass er vollständig textbasiert ist.

Bash ist ein spezielles Beispiel für eine Befehlszeilen-Shell und wahrscheinlich eine der bekanntesten. Es ist die Standardeinstellung in vielen Linux-Distributionen sowie in OS X. Es wurde als Ersatz für die Bourne-Shell entwickelt (Bash steht) für "Bourne again shell") eine der ersten Unix-Shells .

Beispiele für Befehlszeilen-Shells unter Windows sind cmd.exe (auch als Eingabeaufforderung bezeichnet) und PowerShell .

Indrek
quelle
3
Finder wird unter OS X normalerweise nicht als Shell bezeichnet. Die meisten GUI- und Fensterverwaltungsfunktionen werden von anderen Prozessen verwaltet.
Lri
1
@LauriRanta Wikipedia scheint nicht zuzustimmen . Unabhängig davon, ob es Hilfe von anderen Prozessen hat oder nicht, besteht seine Aufgabe darin, dem Benutzer die Interaktion mit dem zugrunde liegenden Betriebssystem über eine grafische Benutzeroberfläche zu ermöglichen, und passt somit zur Beschreibung einer grafischen Shell.
Indrek
1
Ich denke, der Begriff grafische Shell kann auch für Dateiverwaltungsanwendungen gelten. Unter OS X wird es jedoch im Allgemeinen nicht verwendet, und Finder ähnelt eher Nautilus als der Windows-Shell oder Unity.
Lri
6
@LauriRanta: schnelles Quiz, was ist die Ikone von Nautilus?
Lie Ryan
2
@LauriRanta Wäre Dock nicht ein besserer Kandidat für eine Shell? Das Starten von Programmen und das Öffnen von Dokumenten, Expose / Spaces / Mission Control, AFAIK Launchpad und der Task Switcher sind ebenfalls Dock-Funktionen.
Daniel Beck
13

Bash ist eine von mehreren Muscheln.

Eine Shell auf einem Unix- oder Unix-ähnlichen System wie OSX oder Linux ist ein Anwendungsprogramm, das eine Befehlszeilenschnittstelle zum Betriebssystem bereitstellt, mit der Sie Befehle eingeben und ausführen können. Es stehen verschiedene Shells zur Auswahl, aber alle bieten Platzhalter für Dateinamen, Piping, hier Dokumente, Befehlssubstitution, Variablen und Kontrollstrukturen für Bedingungstests und Iterationen.

Die ursprüngliche Unix-Shell war die Bourne-Shell , sh, geschrieben von Stephen Bourne bei Bell Labs. Dann kam die C-Shell , geschrieben von Bill Joy in Berkeley, seitdem als tcsh aktualisiert . Andere Shells sind die Korn-Shell , ksh, geschrieben von David Korn, ebenfalls bei Bell Labs, und bash , die "Bourne again-Shell", geschrieben von Brian Fox für das GNU-Projekt als kostenloser Ersatz für sh.

Heute ist Bash wahrscheinlich die beliebteste Unix-Shell, aber viele Leute (ich eingeschlossen) bevorzugen immer noch die C-Shell, basierend auf (wie es einigen von uns scheint) ihrer schöneren Syntax. Grundsätzlich ist es Geschmackssache, daher empfehle ich, die von mir verlinkten Wikipedia-Artikel zu lesen, um Ihnen den Einstieg zu erleichtern.

Nicole Hamilton
quelle
2
Shells sind nicht unbedingt befehlszeilenbasiert, es gibt auch viele grafische Shells, z. B. Nautilus, Windows Explorer, Finder usw. Der wesentliche Punkt für Shell ist ein Wrapper / eine Benutzeroberfläche / eine Shell für die Kernfunktionen / Systemaufrufe des Betriebssystems. Das heißt, Shells ermöglichen die Verwaltung von Ressourcen (z. B. Dateiverwaltung) und die Verwaltung von Prozessen.
Lie Ryan
1
@LieRyan das sind keine Shells, sie sind Dateimanager. In Shells können integrierte Befehls- / Skriptinterpreter ausgeführt werden. Siehe meine Antwort. Nur ein Programm über einen Dateimanager ausführen zu können, macht es nicht zu einer Shell.
Bill Rosmus
@ BillR: Du solltest die Gnome Shell-Leute über deine Definition informieren.
Paradroid
2
Ich bin geneigt, Lie Ryan und Paradroid zuzustimmen, dass grafische Muscheln jetzt als Muscheln betrachtet werden. Ich bin genauso in das Kommandozeilen-Paradigma investiert wie jeder andere und habe mich in den 90er Jahren geweigert, grafische Shells als Shells zu akzeptieren. Aber mit all den Widgets des Control Panels und so weiter in einer modernen grafischen Shell stimme ich jetzt zu, dass die übliche Verwendung darin besteht, sie Shells zu nennen, und dass diese Verwendung korrekt ist. Sie entsprechen der Definition einer Shell, einer relativ dünnen Benutzeroberflächenschicht um das zugrunde liegende Betriebssystem. Grafische Shells sind schwächer darin, wie jemand etwas schreiben würde, aber viele Benutzer kümmern sich nicht darum.
Nicole Hamilton
6

Der Begriff "Shell" ist gut benannt. Es ist buchstäblich eine Hülle um das Betriebssystem, die es dem Benutzer ermöglicht, mit dem Computer zu interagieren. Als es ursprünglich konzipiert wurde, gab es nur sehr wenige grafische Benutzeroberflächen (keine Fenster :(). Alles wurde über die Befehlszeile erledigt. Aber selbst die Befehlszeile brauchte einen Ort zum Leben. Sie lebte und lebt in einer Shell .

In einfachen Worten, damit die Befehlszeile nützlich war, benötigte sie Anweisungen, die sie aufrufen konnte. Daher wurden Programme in der Shell ausgeführt, damit die Befehlszeile verwendet werden kann. Die Programme waren eng in ihren eigenen Paketen zusammengefasst und sollten zusammenarbeiten. Dazu gehören Programme wie "ls" und "grep", "ps", "sed" usw. Sie enthalten auch Befehle zur Dateiumleitung wie ">" und "<" sowie Pipes ("|"). Noch wichtiger ist, dass sie auch Programmierkonstrukte wie bedingte Operationen enthalten (wenn dann für Schleifen, während Schleifen, Möglichkeiten, den Status zu überprüfen, der beim Ausführen einer Anweisung zurückgegeben wird (z. B. wenn Sie "ls" ausführen, hat es etwas gefunden?)) so wie das). Dies sind die Grundlagen komplexerer Befehlszeilenskripte (Shell).

Wenn jemand den Begriff "Bash Shell" verwendet, spricht er von einem Befehlszeileninterpreter namens "Bash", der in der O / S-Shell ausgeführt wird. Man könnte es sich als Abkürzung für 'Bash Shell Interpreter' vorstellen. Es gibt andere Dolmetscher wie Bourne (Bash ist eine neue und verbesserte Bourne Shell und steht für Bourne Again Shell). Es gibt auch die C-Shell, die K-Shell (von vielen bevorzugt, die komplexe Shell-Skripte schreiben) und andere GNU-Varianten. Im Laufe der Jahre ist es üblich geworden, auf den bestimmten Befehlszeileninterpreter zu verweisen, den Sie als Shell verwenden, da einer ohne den anderen nicht verwendet werden kann. Aber die Realität ist, dass sie unterschiedlich sind.

Warum sie eigentlich als Befehlszeileninterpreter und nicht als eigentliche Shell bekannt sind: Dies liegt daran, dass sie in der Shell leben und alle Befehle so interpretieren, als würden sie in einem Programm ausgeführt. Und der Shell ist es egal, welchen Interpreter Sie darin ausführen, solange sie den richtigen Standards entspricht.

Und warum sie Dolmetscher genannt werden, liegt daran, dass sie wirklich Dolmetscher sind. Auch wenn Sie ein Skript nicht explizit ausführen (und ein Skript ist eigentlich nur eine Textdatei mit Befehlen, die Sie erstellen, damit Sie dieselben Befehle immer wieder ausführen können, ohne sie erneut eingeben zu müssen). Nehmen Sie zum Beispiel den bescheidenen Befehl 'ls'. Wenn Sie es ausführen, wird eine Liste der Dateien zurückgegeben. Für Ihre Frage ist es jedoch wichtiger, wie es ausgeführt wird: Es wird tatsächlich im Kontext des Befehlszeileninterpreters ausgeführt, selbst wenn Sie nur einen scheinbar einfachen einmaligen Befehl ausführen. Das heißt, es läuft so, als wäre es eine Aussage in einem größeren Programm. Es läuft wie in einer Shell-Skript-Skriptdatei, ohne sich tatsächlich in einer Shell-Skriptdatei zu befinden. Eine anonyme Shell-Skriptdatei.

Alles, was Sie in der Befehlszeile ausführen, hat dies gemeinsam (sei es ein einzelner Befehl wie 'ls' oder eine Skriptdatei voller Befehle und Iteratoren und bedingter Anweisungen): Alles wird vom Befehlszeileninterpreter verarbeitet. sei es Bash, C-Shell, K-Shell (Standard unter AIX übrigens).

Um zu sehen, was ich meine, machen Sie ein Verzeichnis 'test':

mkdir test

Geben Sie es ein und führen Sie die folgenden Befehle aus

grep hello * 

Sie erhalten eine Antwort wie "Keine solche Datei oder kein solches Verzeichnis". Geben Sie nun den Befehl ein

echo $?

($? sagt, sag mir, was du in einem kryptischen Computer gefunden hast.) Du solltest sehen, dass es eine Zahl (es sollte sein) '2' zurückgibt. Dies ist der Rückkehrcode von grep, der "keine solche Datei oder kein solches Verzeichnis" bedeutet. Führen Sie nun Folgendes aus:

echo hello > hello.txt
grep hello *
echo $?

Sie sehen die Datei 'hello.txt', die vom ersten grep-Befehl zurückgegeben wurde, und sollten jetzt das 'echo $?' Geben Sie die Zahl '0' zurück, was bedeutet, dass tatsächlich etwas gefunden wurde.

Selbst wenn diese scheinbar einmaligen Befehle ausgeführt werden, verhält sich der Befehlszeileninterpreter so, als wären sie Teil eines größeren Programms und verfolgt ihre Rückgabewerte. Wenn Sie das * am Ende des Befehls grep vergessen, wird es daher nicht zurückgegeben. Es ist bekannt, dass die Aussage unvollständig ist und mehr Input erwartet. Schließlich könnten Sie ihn möglicherweise bitten, die Ergebnisse einer Schleife zu erfassen, deren Schreiben und Ausführen in der Befehlszeile völlig legal ist.

Unterm Strich ist die Shell die Shell, und der Interpreter (unabhängig vom Namen des von Ihnen verwendeten, 'Bash', K-Shell usw.) ist unterschiedlich. Aber oft werden sie austauschbar verwendet, weil sie zu jedem Zeitpunkt vollständig miteinander verbunden sind.

Bill Rosmus
quelle
2

Shell ist eine textbasierte Benutzeroberfläche.

Bash ist eine Art Shell.

HayekSplosives
quelle
2
Was ist eine "testbasierte Benutzeroberfläche"? Es wäre auch schön, Ihre Antwort ein wenig zu erweitern. Wie Sie aus den anderen Antworten ersehen können, ist es immer hilfreich, mehr Kontext zu geben.
Slhck
Es tut uns leid. Textbasierte Benutzeroberfläche. Wie möchten Sie, dass ich das erläutere? Eine Shell ist Ihre Befehlszeilenmethode für die Interaktion mit dem Kernel des Betriebssystems. Die Shell interpretiert Ihre Befehle und leitet sie an die Maschine weiter, die dann wiederum die erforderlichen Operationen ausführt, die für den von Ihnen erteilten Befehl relevant sind. Ohne ein 500-seitiges Handbuch ist es schwierig, diese zweideutige Frage effektiv zu erläutern. Der Aufwand der Antwort passte zum Aufwand der Frage. Diese Frage ist Äpfel zu Orangen.
HayekSplosives
Wenn Sie der Meinung sind, dass eine Frage jetzt Aufwand zeigt, bedeutet dies nicht automatisch, dass Sie sich nicht um eine Antwort bemühen sollten. Ihrer Antwort fehlt im Vergleich zu den anderen ein kleines Detail. Natürlich liegt es an Ihnen, das hinzuzufügen.
Slhck
Ich schätze die Korrektur und die Lektion in persönlicher Verantwortung. Vielen Dank, dass Sie diejenigen, die nicht bereit sind, sich anzustrengen, vor denen schützen, die dies tun. Ich vergesse nicht, wie viel ich dem Poster schuldete.
HayekSplosives
1

bash ist eine der vielen Muscheln, die es gibt.

Alle Muscheln haben ihre Ähnlichkeiten und Unterschiede. Beispielsweise kann ein in bash geschriebenes Skript vollständig oder weitgehend mit einer anderen Shell (z. B. zsh ) kompatibel sein .

Aufgrund der bashweit verbreiteten Tatsache wird häufig impliziert, dass ein Skript damit kompatibel ist.

Wenn Sie ein Buch kaufen möchten, kaufen Sie eines, das speziell für die Shell geschrieben wurde, die Sie verwenden möchten. Es wäre jedoch eine gute Idee, sich über ihre Unterschiede zu informieren, bevor Sie Geld ausgeben.

dset0x
quelle