Quel est le but de l'utilisation de #!/usr/bin/env <sh|bash|python>
shebang par rapport à #!/bin/bash
, #!/bin/sh
ou #!/usr/bin/python
?
command-line
bash
environment
Tuminoïde
la source
la source
Réponses:
Certaines personnes peuvent utiliser un python (perl, etc.) différent de celui du système.
/usr/bin/env python
exécuterait la version configurée comme la version actuelle, ce qui pourrait rendre le script plus portable.D'un autre côté, certains systèmes n'en auraient pas
/usr/bin/env
. En outre, vous ne pouvez pas l'utiliser#!/usr/bin/env foo x
comme remplacement#!foo x
, carfoo x
sera interprété comme un seul argument. La valeur de l'approche est donc discutable.la source
info coreutils 'env invocation'
je peux voir que cette forme d'appel s'assure qu'il s'agit d'un binaire externe au lieu d'un shell intégré, mais aucune indication en quoienv python
serait-elle différente depython
?PATH
comprend probablement d'/usr/local/bin
abord. Si quelqu'un y a installé manuellement python, ilenv
l'appellera alors#!/usr/bin/python
qu'il le contournera.virtualenv
est un outil assez populaire, et il installe un exécutable python dans le répertoire de travail. Vous auriez besoin de l'env
astuce pour le faire fonctionner correctement.env python
c'est la même chose quepython
. Cependant, le problème est que vous ne pouvez pas écrire un shebang comme#!python
: vous devez spécifier un chemin complet.