Utilisez l'extension .sh ou .bash pour les scripts bash?

36

(Voir Utilisation #! / Bin / sh ou #! / Bin / bash pour la compatibilité et la facilité d'utilisation Ubuntu-OSX & POSIX )

Si je veux que mes scripts utilisent le shell bash, utiliser l'extension .bash appelle bash ou est-ce que cela dépend de la configuration système / de la première ligne de commande? Si les deux étaient en vigueur mais différents, lequel aurait préséance?

Je ne sais pas s'il faut terminer mes scripts avec .sh pour simplement indiquer "script shell", puis #!/usr/bin/env bashlaisser la première ligne sélectionner le shell bash (par exemple ) ou s'il faut simplement les terminer avec .bash (ainsi que le paramètre de ligne 1 ). Je veux que bash soit invoqué.

Michael Durrant
la source
3
Je ne pense pas avoir déjà vu une .bashextension. De plus, la politique de Debian prévoit que les scripts des paquets qui aboutissent dans l’un des bindossiers ne contiennent pas d’extension.
Muru

Réponses:

19

Est-ce que l'utilisation de l'extension .bash appelle réellement bash ou est-ce que cela dépend de la configuration du système / de la première ligne shebang?

Si vous n'utilisez pas explicitement un interpréteur, l'interpréteur appelé est déterminé par l' shebangélément utilisé dans le script. Si vous utilisez un interprète spécifiquement, l'interprète se moque de l'extension que vous donnez à votre script. Cependant, l'extension existe pour rendre très évident pour les autres le type de script dont il s'agit.

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

Voir, l' .pyextension au script bash n'en fait pas un script python.

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

C'est toujours un bashscript.

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script
Sree
la source
23

La dénomination du script n'a rien à voir avec la façon dont il est exécuté.

La ligne shebang définit l'interpréteur utilisé pour exécuter le script.

Personnellement, je ne me soucie pas de savoir si un script est sh, bash, perl, peu importe, alors je le nomme simplement pour ce qu'il fait; Je trouve l'ajout d'une extension redondante. Je ferai file scriptnamesavoir ce qu'est le fichier si je veux le savoir.

Donc, si vous voulez que votre script soit exécuté avec bash, utilisez #!/bin/bashcomme première ligne.

Wurtel
la source
4
De plus, si le choix d'implémentation du script change (par exemple, il est réécrit en Python, Perl, C ...), ne pas avoir d' .shextension -style signifie qu'il n'est pas nécessaire de le renommer. (Certes, rien n'empêche un programme C de produire un binaire avec une .shextension, ce serait simplement déroutant.)
Stephen Kitt
2
Utilisation #!/usr/bin/env bashpour la portabilité, discutée ici stackoverflow.com/a/10383546/54964
Léo Léopold Hertz 준영
4
@wurtel (commentaire tardif, OK?) Ajouter une extension imho est loin d'être redondant. La plupart des éditeurs prennent en charge la coloration syntaxique en fonction de l'extension. De plus, il est logique de disposer d'une visibilité immédiate du type de fichier. La clarté et la lisibilité comptent beaucoup.
RolfBly
@RolfBly: Les éditeurs que j'utilise reconnaissent le shebang et fournissent une coloration syntaxique. La clarté est utile, mais la plupart du temps, nous voulons exécuter une commande. C’est bien si je dois taper moins et si je ne dois pas me souvenir de son langage d’implémentation.
Hontvári Levente