Warum sollte man env in shebang verwenden?

19

Was ist der Zweck der Verwendung #!/usr/bin/env <sh|bash|python>shebang im Vergleich zu #!/bin/bash, #!/bin/shoder #!/usr/bin/python?

Tuminoid
quelle
4
Es gibt eine gute Antwort hier in Bezug auf die allgemeine Verwendung von env.
Kevin Bowen

Antworten:

11

Einige Benutzer verwenden möglicherweise ein anderes Python (Perl usw.) als das System-Python. /usr/bin/env pythonwürde die Version ausführen, die als die aktuelle konfiguriert ist, wodurch das Skript möglicherweise portabler wird.

Auf der anderen Seite haben Berichten zufolge einige Systeme nicht /usr/bin/env. Sie können auch nicht #!/usr/bin/env foo xals Ersatz für verwenden #!foo x, da foo xdies als einzelnes Argument interpretiert wird. Der Wert des Ansatzes ist also umstritten.

Choroba
quelle
1
Wo konfiguriert? Von info coreutils 'env invocation'mir diese Form des Aufrufs Marke sehen kann sicher ist es externe binäre statt Schale eingebaut, aber kein Hinweis darauf , wie env pythonaus anders wäre python?
Tuminoid
4
Ihr PATHschließt wahrscheinlich /usr/local/binzuerst ein. Wenn jemand Python dort manuell installiert hat, envwird er es aufrufen, wohingegen er #!/usr/bin/pythones umgehen wird.
Robie Basak
2
virtualenvist ein sehr beliebtes Tool und installiert eine ausführbare Python-Datei im Arbeitsverzeichnis. Sie würden den envTrick brauchen , damit es richtig funktioniert.
Flimm
2
@Tuminoid: du hast recht: env pythonist das gleiche wie python. Das Problem ist jedoch, dass Sie nicht schreiben können wie #!python: Sie müssen einen vollständigen Pfad angeben.
Andrea Corbellini