Was ist der Zweck der Verwendung #!/usr/bin/env <sh|bash|python>
shebang im Vergleich zu #!/bin/bash
, #!/bin/sh
oder #!/usr/bin/python
?
command-line
bash
environment
Tuminoid
quelle
quelle
Antworten:
Einige Benutzer verwenden möglicherweise ein anderes Python (Perl usw.) als das System-Python.
/usr/bin/env python
wü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 x
als Ersatz für verwenden#!foo x
, dafoo x
dies als einzelnes Argument interpretiert wird. Der Wert des Ansatzes ist also umstritten.quelle
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 , wieenv python
aus anders wärepython
?PATH
schließt wahrscheinlich/usr/local/bin
zuerst ein. Wenn jemand Python dort manuell installiert hat,env
wird er es aufrufen, wohingegen er#!/usr/bin/python
es umgehen wird.virtualenv
ist ein sehr beliebtes Tool und installiert eine ausführbare Python-Datei im Arbeitsverzeichnis. Sie würden denenv
Trick brauchen , damit es richtig funktioniert.env python
ist das gleiche wiepython
. Das Problem ist jedoch, dass Sie nicht schreiben können wie#!python
: Sie müssen einen vollständigen Pfad angeben.