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?


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.