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?


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.