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 #!.
  • interpreter ist 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.