Quel est le meilleur Bash shebang?
  y a-t-il un Bash  shebang objectivement meilleur que les autres pour la plupart des utilisations?  
-    #!/usr/bin/env bash
-   #!/bin/bash
-   #!/bin/sh
-   #!/bin/sh -
- etc
je me rappelle vaguement avoir entendu il y a longtemps que l'ajout d'un tiret à la fin empêche quelqu'un de passer une commande à votre script, mais je ne trouve aucun détail sur que.
4 réponses
 vous devez utiliser   #!/usr/bin/env bash   pour  portabilité  : différents *nixes put bash en différents endroits, et en utilisant /usr/bin/env est une solution pour exécuter le premier bash trouvé sur le PATH . Et        sh  n'est pas  bash        .  
  /bin/sh est habituellement un lien vers le shell par défaut du système, qui est souvent bash , mais sur, par exemple, les systèmes Debian est le plus léger dash .  Quoi qu'il en soit , le shell original de Bourne est  sh , donc si votre script utilise quelque  bash  (2e génération, "Bourne Again sh") caractéristiques spécifiques (  [[ ]]  tests, tableaux, diverses choses sucrées, etc.), alors vous devriez être plus spécifique et utiliser la dernière. De cette façon, sur les systèmes où bash n'est pas installé, votre script ne fonctionne pas. Il y a peut-être une trilogie passionnante de films sur cette évolution...mais ça pourrait être des ouï-dire.  
 note aussi que lorsqu'on évoque sh , bash dans une certaine mesure  se comporte comme norme POSIX   sh (voir aussi  the GNU docs   à ce sujet).  
utiliser une ligne shebang pour invoquer L'interprète approprié n'est pas seulement pour BASH. Vous pouvez utiliser le shebang pour n'importe quel langage interprété sur votre système tel que Perl, Python, PHP (CLI) et beaucoup d'autres. Par ailleurs, le shebang
#!/bin/sh -
 (il peut aussi y avoir deux tirets, i.e. -- ) termine Bash options Tout ce qui suit sera traité comme des noms de fichiers et des arguments.  
  L'utilisation de la commande  env  rend votre script portable et vous permet de configurer des environnements personnalisés pour votre script donc les scripts portables devraient utiliser  
#!/usr/bin/env bash
ou quelle que soit la langue telle que Perl
#!/usr/bin/env perl
  assurez-vous de regarder les pages  man  pour  bash :  
man bash
  et  env :  
man env
  Note: sur Debian et les systèmes basés sur Debian, comme Ubuntu,  sh  est lié à  dash   pas  bash . Comme tous les scripts système utilisent  sh . Cela permet à bash de croître et au système de rester stable, selon Debian.  
aussi, pour conserver l'invocation *nix comme je n'utilise jamais d'extensions de fichiers sur les scripts invoqués de shebang, car vous ne pouvez pas omettre l'extension sur l'invocation sur les exécutables comme vous le pouvez sur Windows. La commande file peut l'identifier comme un script.
  cela dépend vraiment de la façon dont vous écrivez vos scripts bash. Si votre /bin/sh est lié de façon symétrique à bash, lorsque bash est invoqué comme sh ,  certaines fonctionnalités ne sont pas disponibles  .  
  si vous voulez des fonctionnalités bash-specific, non-POSIX, utilisez  #!/bin/bash