BASH shebang - Welcher ist der bevorzugte
#!/usr/bin/env bash
vs #!/bin/bash
Welches ist der richtige Interpreter für ein BASH Skript? Welches ist der standard Interpreter für ein BASH Skript?
Unter dem shebang
versteht die Kombination von #!
am Anfang eines Skriptes die den Interpreter definiert. Wenn man schon viele Skripte gesehen hat, wird man feststellen das es eine Ganze Latte an verschiedenen "ersten Zeilen" beginnend mit #!
in Skripten gibt. Im Großen Ganzen wird zwischen zwei verschiedenen Methoden unterschieden, einen Interpreter zu definieren (BASH
und PERL
als Beispiel):
#!/bin/bash
#!/usr/bin/perl
vs
#!/usr/bin/env bash
#!/usr/bin/env perl
Vielleicht erkennt man hier schon den ersten Vorteil der Lösung mit dem env
Utility, man muss den Pfad des Interpreters nicht kennen. Heißt auch, es ist Plattform unabhängig, da es sein kann, das auf anderen Systemen der Interpreter nicht im selben Pfad liegt. Ein Nachteil der env
Methode ist, dass man dem Interpreter keine Optionen mitgeben kann, wie zum Beispiel den Debug Modus von BASH
, bash -x
:
#!/bin/bash -x
Man kann den Interpreter auch ganz einfach überschreiben, in dem man das erstellte Skript einfach mit dem gewünschten Interpreter direkt aufruft:
testscript.sh
#!/usr/bin/env sh
echo "HALLO, dies ist ein TEST Script"
bash testscript.sh
damit wird das Skript nicht mit /bin/sh
ausgeführt sondern mit /bin/bash