J'ai vu dans un certain nombre d'endroits, y compris des recommandations sur ce site ( quel est le shebang Bash préféré? ), À utiliser #!/usr/bin/env bash
de préférence #!/bin/bash
. J'ai même vu une personne entreprenante suggérer que l'utilisation #!/bin/bash
était incorrecte et la fonctionnalité bash serait perdue en faisant cela.
Cela dit, j'utilise bash dans un environnement de test étroitement contrôlé où chaque disque en circulation est essentiellement un clone d'un seul disque maître. Je comprends l'argument de la portabilité, bien qu'il ne soit pas nécessairement applicable dans mon cas. Y a-t-il une autre raison de préférer #!/usr/bin/env bash
les alternatives et, en supposant que la portabilité était un problème, y a-t-il une raison de l'utiliser pourrait casser la fonctionnalité?
env
peut ne pas se trouver à /usr/bin
. Les commentaires de Shebang sont tout à fait une mauvaise idée à mon humble avis. Si votre interpréteur de script par défaut ne gère pas les commentaires shebang, il s'agit simplement d'un commentaire. Cependant, si vous savez que l'interpréteur de script peut gérer les commentaires shebang et que vous connaissez le chemin d'accès à bash, il n'y a aucune raison de ne pas l'invoquer en utilisant son chemin absolu, sauf si le chemin est trop long (peu probable), ou vous pouvez éventuellement porter le script à un système qui n'a pas bash situé dans / bin. Là encore, les mises en garde que j'ai mentionnées précédemment s'appliquent dans ce cas car cela implique la portabilité.
/etc
ou /bin/sh
. bash
est un module complémentaire pour la plupart des systèmes de type Unix. Ce n'est que Linux où il bash
est garanti d'être intégré /bin
et très probablement également lié en tant que /bin/sh
. Depuis que Linux est devenu l'Unix de facto moderne pour beaucoup de gens, le fait qu'il puisse exister des systèmes autres que Linux a été oublié. Dans ma propre réponse ci-dessous, j'ai supposé Linux parce que vous avez dit bash
. Beaucoup de boîtiers BSD avec lesquels j'ai travaillé ne l'ont même pas installé.
/bin/bash
. Bash n'est pas installé par défaut. Si vous le voulez, vous devez pkg install bash
. Une fois installé, il se trouve à /usr/local/bin/bash
. Il n'y a rien installé /bin/bash
sur OpenBSD. Un coup de #!/bin/bash
volonté d'erreur, et #!/usr/bin/env bash
réussira.