Pourquoi utiliser env dans shebang?

19

Quel est le but de l'utilisation de #!/usr/bin/env <sh|bash|python>shebang par rapport à #!/bin/bash, #!/bin/shou #!/usr/bin/python?

Tuminoïde
la source
4
Il y a une bonne réponse ici en ce qui concerne l'utilisation générale d'env.
Kevin Bowen

Réponses:

11

Certaines personnes peuvent utiliser un python (perl, etc.) différent de celui du système. /usr/bin/env pythonexé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 xcomme remplacement #!foo x, car foo xsera interprété comme un seul argument. La valeur de l'approche est donc discutable.

choroba
la source
1
Configuré où? De 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 quoi env pythonserait-elle différente de python?
Tuminoïde
4
Votre PATHcomprend probablement d' /usr/local/binabord. Si quelqu'un y a installé manuellement python, il envl'appellera alors #!/usr/bin/pythonqu'il le contournera.
Robie Basak
2
virtualenvest un outil assez populaire, et il installe un exécutable python dans le répertoire de travail. Vous auriez besoin de l' envastuce pour le faire fonctionner correctement.
Flimm
2
@Tuminoid: vous avez raison: env pythonc'est la même chose que python. Cependant, le problème est que vous ne pouvez pas écrire un shebang comme #!python: vous devez spécifier un chemin complet.
Andrea Corbellini