Die Shebang-Zeile #! am Anfang eines Skripts teilt dem Betriebssystem mit, welcher Interpreter die Datei ausführen soll. Ohne Shebang hängt die Interpretation des Skripts von der aktuellen Shell des Benutzers ab.
Syntax der Shebang-Zeile
Die Shebang-Direktive folgt diesem Format:
#!interpreter [argument]
- Die Zeile muss in der ersten Zeile der Datei stehen.
- Sie beginnt mit den Zeichen
#!. interpreterist der vollständige Pfad zur ausführbaren Datei (z.B./bin/bash).- Optional kann ein einzelnes Argument übergeben werden.
Shebang für Bash-Skripte
Für Bash-Skripte gibt es zwei gängige Varianten:
Variante 1: Absoluter Pfad
#!/bin/bash
Diese Form verwendet den festen Pfad zur Bash-Installation. Auf den meisten Systemen liegt bash unter /bin/bash.
Variante 2: Mit env
#!/usr/bin/env bash
Das Programm env sucht in der PATH-Umgebungsvariable nach bash und verwendet die erste gefundene Installation. Diese Variante bietet mehr Flexibilität, da die Bash nicht an einem bestimmten Ort liegen muss.
Warum ein Shebang wichtig ist
Ohne Shebang verwendet das System den Standardinterpreter der aktuellen Shell. Wenn jemand das Skript aus einer anderen Shell wie zsh oder fish startet, kann das zu unerwarteten Ergebnissen führen.
Mit einem expliziten Shebang stellst du sicher, dass das Skript immer mit Bash interpretiert wird - unabhängig davon, welche Shell der Benutzer verwendet.
Praktisches Beispiel
Erstelle eine Datei namens hallo.sh:
#!/bin/bash
echo "Hallo, Welt!"
Mache das Skript ausführbar:
chmod +x hallo.sh
Führe das Skript aus:
./hallo.sh
Ausgabe:
Hallo, Welt!
Optionen an den Interpreter übergeben
Du kannst dem Interpreter direkt ein Argument mitgeben. Um ein Skript im Debug-Modus auszuführen, der jeden Befehl vor der Ausführung anzeigt:
#!/bin/bash -x
echo "Debug-Modus aktiv"
Bei der env-Variante funktioniert das nicht direkt. Stattdessen setzt du die Option mit set nach dem Shebang:
#!/usr/bin/env bash
set -x
echo "Debug-Modus aktiv"
Shebang überschreiben
Der Interpreter lässt sich beim Aufruf auch explizit angeben. Damit wird die Shebang-Zeile ignoriert:
bash meinskript.sh
Das kann nützlich sein, um ein Skript mit einer anderen Bash-Version zu testen. Im Normalfall solltest du aber den im Shebang definierten Interpreter verwenden, da das Skript möglicherweise auf dessen spezifische Funktionen angewiesen ist.
Shebang für andere Interpreter
Die Shebang-Zeile funktioniert nicht nur mit Bash, sondern mit jedem Interpreter:
#!/usr/bin/env python3
#!/usr/bin/env perl
#!/usr/bin/env ruby
Das Prinzip bleibt gleich: Die erste Zeile bestimmt, welches Programm den Rest der Datei interpretiert.
Zusammenfassung
Die Shebang-Zeile #! definiert den Interpreter für ein Skript. Für portable Bash-Skripte empfiehlt sich #!/usr/bin/env bash, da diese Variante die Bash über die PATH-Variable findet. Mit einem korrekten Shebang läuft das Skript zuverlässig - unabhängig von der Shell des Benutzers.