Quelle est la différence entre "#!/ usr / bin / env bash "et"#!/ usr / bin / bash"?

dans l'en-tête d'un script bash , Quelle est la différence entre ces deux affirmations ?

  1. #!/usr/bin/env bash

  2. #!/usr/bin/bash

quand j'ai essayé de voir la page de manuel env , j'ai eu cette définition:

 env - run a program in a modified environment

ça veut dire Quoi?

238
demandé sur Indradhanush Gupta 2013-05-03 22:10:24

4 réponses

exécuter une commande à travers /usr/bin/env a l'avantage de rechercher n'importe quelle version par défaut du programme est dans votre env ferment.

de Cette façon, vous n'avez pas à chercher dans un endroit spécifique sur le système, comme ces chemins peuvent être à des endroits différents sur différents systèmes. Tant qu'il est sur votre chemin, il le trouvera.

l'inconvénient est que puisque vous n'appelez pas un explicite exécutable, il a le potentiel d'erreurs, et sur les problèmes de sécurité des systèmes multi-utilisateurs (si quelqu'un a réussi à obtenir leur exécutable appelé bash dans votre chemin, par exemple).

#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash     #gives you explicit control on a given system of what executable is called

dans certaines situations, la première peut être préférée (comme exécuter des scripts python avec plusieurs versions de python, sans avoir à retravailler la ligne exécutable). Mais dans les situations où la sécurité est au centre de l'attention, ce dernier serait préférable, car il limite l'injection de code possibilité.

212
répondu Alec Bennett 2017-11-12 22:06:01

en utilisant #!/usr/bin/env NAME fait la recherche shell pour la première correspondance de nom dans la variable d'environnement $PATH. Il peut être utile si vous n'êtes pas conscient du chemin absolu ou si vous ne voulez pas le chercher.

31
répondu Dolphiniac 2013-05-03 18:19:22

au lieu de définir explicitement le chemin vers l'interpréteur comme dans /usr/bin/bash/ , en utilisant la commande env, l'interpréteur est recherché et lancé d'où il vient pour la première fois. Il s'agit à la fois de et de

7
répondu safay 2013-05-03 18:45:49

je le trouve utile, parce que quand je ne connaissais pas env, avant de commencer à écrire script je faisais ceci:

type nodejs > scriptname.js #or any other environment

et puis je modifiais cette ligne dans le fichier en shebang.

J'ai fait ça, parce que je n'ai pas toujours où est nodejs sur mon ordinateur -- /usr/bin/ ou /bin/, donc pour moi env est très utile. Peut-être il y a des détails avec cela, mais c'est ma raison

2
répondu sudo97 2017-08-14 20:38:09