sh vs. bash: Eine Zusammenfassung
Wenn Sie dies lesen, ist die Wahrscheinlichkeit groß, dass Sie in der Vergangenheit auf die Begriffe Shell, sh, bash usw. gestoßen sind. Diese Begriffe können verwirrend klingen, und da sie eng miteinander verwandt sind, wird das Problem noch schlimmer. Deshalb habe ich mich entschlossen, diesen Beitrag mit dem Ziel zu schreiben, die Unterschiede zwischen ihnen zu erklären.
Shell vs. Kernel
Bevor wir weitermachen, ist es wichtig, dass wir verstehen, was die Begriffe Shell und Kernel bedeuten.
Kernel
Der Kernel ist das Zentrum des Betriebssystems. Er ist verantwortlich für Dinge wie die Interaktion mit der Hardware, Datei-E/A und das Starten von Prozessen.
Shell
Die Shell fungiert als Schnittstelle zwischen dem Benutzer und dem Kernel. Technisch gesehen ist eine Shell ein Kommandozeileninterpreter, d.h. das Programm, das entweder den im Terminalemulator eingegebenen Befehl interpretiert (interaktiver Modus) oder Shellskripte (Textdateien mit Befehlen) abarbeitet.
Nun, da wir eine Vorstellung davon haben, was die Shell und der Kernel sind, können wir versuchen, sh und Bash zu verstehen.
sh
Streng genommen ist sh (oder die Shell Command Language) eine Programmiersprache, die durch den POSIX-Standard beschrieben wird. Der Schlüssel dazu ist, dass sh nicht wirklich eine Programmiersprache an sich ist. Es handelt sich lediglich um eine Spezifikation. Die Spezifikation ist eine detaillierte Beschreibung der Syntax und Semantik dieser Sprache. Die Spezifikation beinhaltet keine Implementierung.
Bash
Es gibt verschiedene Betriebssysteme mit ihren eigenen Shells und Kernel. Bash ist die Shell für das GNU-Betriebssystem. Wir können aber auch sagen, dass die Bash eine Programmiersprache ist.
Warte, ist das nicht verwirrend? Ist bash sowohl eine Shell als auch eine Programmiersprache?
Denken Sie an Python. Wir können Python auch im interaktiven Modus starten und es verhält sich wie eine Shell. Oder JavaScript, oder Ruby oder irgendeine andere Skriptsprache.
Macht das Sinn?
So ist bash eine Programmiersprache, die als eine Implementierung von sh betrachtet werden kann (obwohl sich das mit der Zeit geändert hat).
Zusammengefasst ist sh eine Spezifikation, bash ist die Implementierung.