Diese erste Zeile (#!/bin/bash oder #!/bin/sh) hat einen Namen. Es ist bekannt als ’she-bang'(Shabang). Dies ergibt sich aus der Verkettung der Token sharp (#) und bang (!). Es wird auch als Sh-Bang, Hashbang, Poundbang oder Hash-Pling bezeichnet. In der Informatik ist ein She-Bang die Zeichenfolge, die aus den Zeichen Nummernzeichen und Ausrufezeichen (#!) am Anfang eines Skripts.
/bin/bash VS /bin/sh
Wir haben oft verschiedene She-Bang- oder Script-Header gesehen. Wir fragen uns oft, warum dieses bestimmte Skript diesen bestimmten She-Bang verwendet, warum nicht ein anderer. Auf Unix-ähnlichen Betriebssystemen haben wir die Wahl zwischen mehreren Shells. Die Shell ist nicht nur für die kleinen Eingabeaufforderungen verantwortlich, sondern interpretiert auch die Befehle des Skripts. Daher spielt die Shell eine wichtige Rolle, insbesondere wenn wir große und komplexe Logiken mit Bedingungen, Pipes, Schleifen usw. implementieren.
/bin/sh ist eine ausführbare Datei, die die Systemshell darstellt und normalerweise als symbolischer Link implementiert ist, der auf die ausführbare Datei für die Shell verweist, bei der es sich um die Systemshell handelt. Die System-Shell ist im Grunde die Standard-Shell, die das Skript verwenden sollte. In den letzten Jahren haben Debian (und Ubuntu) beschlossen, die Systemshell von bash auf dash umzustellen — eine ähnliche Shell, aber leichter und viel schneller.
Dash ist ziemlich gut mit bash kompatibel und basiert auf demselben POSIX-Standard. Die bash-spezifischen Erweiterungen werden jedoch nicht implementiert. POSIX Standard ist Portable Operating System Interface, ein Versuch, UNIX-ähnliche Betriebssysteme zu standardisieren. Obwohl Ubuntus System-Shell auf Dash zeigt, ist Ihre Login-Shell als Benutzer zu diesem Zeitpunkt weiterhin bash.
/bin/bash ist die häufigste Shell, die als Standard-Shell für die Benutzeranmeldung des Linux-Systems verwendet wird. Der Name der Shell ist ein Akronym für Bourne-again Shell. Bash kann die überwiegende Mehrheit der Skripte ausführen und wird daher häufig verwendet, da es mehr Funktionen, eine gute Entwicklung und eine bessere Syntax bietet.
WAS IST DAS ? / WARUM VERWENDEN WIR ES?
#!/bin/bash
echo $(date) # Will print the output of date command
touch ~/output.txt
echo "Hey there" > ~/output.txt
Betrachten wir ein sehr einfaches Skript wie oben. In jedem einfachsten Fall, wenn wir ein Shell-Skript analysieren, ist es nichts anderes als eine Liste von Befehlen, die in einer Datei gespeichert sind. Es reduziert unseren Aufwand, die gleiche Aufgabe oder Befehle immer wieder auszuführen. Wenn wir uns also den Anfang des Skripts ansehen, beginnt die erste Zeile mit einem Hash (#) und einem Ausrufezeichen (!). Wie Sie bereits wissen müssen, wird jede Zeile, die mit einem Hash (#) beginnt, als Kommentar gelesen. Wenn wir also das Skript ausführen, wird die erste Zeile als Kommentar gelesen und der Interpreter geht in die zweite Zeile. Aber die erste Zeile hat bereits ihren Job gemacht.
In Unix-ähnlichen Betriebssystemen, wenn ein Skript mit einem she-bang(#!) als Programm ausgeführt wird, analysiert der Programmlader den Rest der Anfangszeile des Skripts als Interpreter-Direktive. Daher wird stattdessen das angegebene Interpreterprogramm ausgeführt, wobei der Pfad, der ursprünglich durch das Skript verwendet wurde, als Argument übergeben wird.
Angenommen, ein Skript beginnt mit der folgenden Zeile:
#!/bin/sh
dann wird der Programmlader angewiesen, das Programm /bin /sh anstelle eines anderen Programms zu verwenden, wobei der Pfad des Skripts als erstes Argument übergeben wird.
In einfachen Worten, der She-Bang an der Spitze des Skripts teilt dem System mit, dass diese Datei eine Reihe von Befehlen ist, die dem angegebenen Befehlsinterpreter zugeführt werden sollen. Unix-ähnliche Betriebssysteme haben eine Vielzahl von Shells und jede der Skriptheaderzeilen ruft einen anderen Befehlsinterpreter auf.
EINIGE she-bang BEISPIELE
#!/bin/sh : Führt das Skript mit der Bourne-Shell oder einer kompatiblen Shell aus, mit Pfad /bin/sh
#!/bin/bash : Führt das Skript mit der Bash-Shell aus.
#!/bin/csh -f : Führt das Skript mit der C-Shell oder einer kompatiblen Shell aus.
#!/usr/bin/perl -T :Führt das Skript mit perl mit der Option taint checks aus
#!/usr/bin/env python :Führt das Skript mit Python aus, indem Sie den Pfad zum Python-Interpreter automatisch aus den Umgebungsvariablen
Hoffentlich haben Sie eine bessere Vorstellung davon, was she-bang jetzt ist und welchem Zweck es dient.