web-dev-qa-db-fra.com

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

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

Si je veux que mes scripts utilisent le shell bash, l'utilisation de l'extension .bash appelle-t-elle réellement bash ou cela dépend-il de la configuration système/1ère ligne Shebang? Si les deux étaient en vigueur mais différents, lequel aurait préséance?

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

38
Michael Durrant

est-ce que l'utilisation de l'extension .bash appelle en fait bash ou cela dépend-il de la configuration du système/de la 1ère ligne Shebang?.

Si vous n'utilisez pas explicitement un interpréteur, alors l'interpréteur invoqué est déterminé par le Shebang utilisé dans le script. Si vous utilisez un interpréteur spécifiquement, alors l'interpréteur ne se soucie pas de l'extension que vous donnez à votre script. Cependant, l'extension existe pour qu'il soit très évident pour les autres de quel type de script il s'agit.

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

Voir, .py l'extension du 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 script bash.

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

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

La ligne Shebang définit quel interpréteur est utilisé pour exécuter le script.

Personnellement, je ne me soucie pas si un script est sh, bash, Perl, peu importe donc je le nomme juste pour ce qu'il fait; Je trouve que l'ajout d'une extension est redondant. Je ferai file scriptname pour savoir quel est le fichier si je veux le savoir.

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

24
wurtel