BASH shebang - Welcher ist der bevorzugte

Aus Laub-Home Wiki

#!/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

Quellen