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 ?
-
#!/usr/bin/env bash
-
#!/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?
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é.
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.
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