In guter Umgebung

Warum man /usr/bin/env als shebang nutzen sollte.

Einführung

Wenn man Shell-Scripte schreibt oder auch Python- oder Perl-Scripte so muss man immer den zu verwendenden Interpreter als sogenanntes Shebang in der ersten Zeile angeben:

#!/bin/python3

echo "Bla"

Die Zeile sagt der Shell die das Script ausführen soll mit welchem Interpreter das Script ausgeführt werden soll.
Dadurch kann man ein Script einfach durch Doppelklick in einem Dateiexplorer oder durch ./meinscript.py aufrufen.
Würde man sie nicht angeben müsste man ein entsprechendes Script mit dem entprechenden Interpreter aufrufen, also so zum Beispiel in der Kommandozeile:

python3 meinsrcipt.py

Schönheitsfehler

Leider hat das ganzei einen Schönheitsfehler wenn man das gleiche Script auf verschiedenen Systemen nutzen will oder mit anderen Menschen teilen.
Denn auf meinem Computer mag die bash unter /bin/bash liegen, bei anderen Installationen aber unter /usr/bin/bash oder überhaupt ganz woanders.
Bei anderen Interpretern gibt es ggf. noch mehr Vielfalt wo sie sich verstecken können.

"Lösung"

Auf allen (halbwegs modernen) Systemen gibt es das Programm env, welches in im Prinzip allen Fällen unter /usr/bin liegt.

#!/usr/bin/env python3

echo "Bla"

Wie man sieht wird der gewünschte Pfad an env übergeben und das findet heraus wo sich der gewünschte Interpreter befindet (solange er in einem Verzeichnis ist der in der PATH-Umgebungsvariable definiert ist).