Je me demandais s'il existe une convention pour les extensions de type de fichier pour les scripts shell que vous souhaitez source au lieu d'exécuter. Par exemple:
Si je veux exécuter ce script en sous-shell.
./script.sh
Si je veux me rappeler d'exécuter ce script à partir du shell actuel.
. script.source
Existe-t-il une convention (comme POSIX par exemple) pour un type de fichier dans le deuxième exemple? Quelque chose comme .source
ou .sourceme
?
Mettre à jour
Cette question ne demande aucun avis. J'ai clairement indiqué que j'aimerais savoir s'il existe une extension de fichier standardisée pour ce type de scripts. Cette question est encore moins basée sur l'opinion que cette question bien reçue sur un problème similaire ( Utiliser l'extension .sh ou .bash pour les scripts bash? ).
shell-script
shell
standard
conventions
Mateusz Piotrowski
la source
la source
#!/bin/sh
ou similaires ne devraient pas avoir d'extension, car l'utilisateur ne devrait pas avoir à se soucier de la langue dans laquelle le script sous-jacent a été écrit.$PATH
, vous venez d'utiliser tout le temps, de sorte que son comme,ps
,ls
,curl
et toutes les autres commandes, alors vous commencez à construire des fonctions d'achèvement shell autour d' elle, je trouve son ok pour supprimer l'extension. Mais oui, lorsque vous vous approvisionnez en script shell, qui ne sont pas exécutables par eux-mêmes, je nechmod +x
les utiliserais pas et je les nommeraisscript.sh
. aussi j'attribue souvent une extension uniquement parce que si je ne le fais pas, je n'obtiendrai pas de coloration syntaxique sur mon éditeur.Réponses:
J'utiliserais
.sh
(pour les fichiers ensh
langage POSIX ,.bash
pour lesbash
fichiers non compatibles sh , c'est-à-dire que l'extension identifie la langue dans laquelle le script est écrit) pour les fichiers destinés à être sourcés (ou plus généralement non destinés à être exécutés), et aucune extension pour les fichiers destinés à être exécutés.Vous pouvez également ajouter un:
she-bang, de sorte que lorsqu'ils sont exécutés par erreur (même si je m'attends à ce que ces fichiers ne reçoivent pas d'autorisations d'exécution, ce qui empêcherait déjà l'exécution), vous recevez un avis indiquant qu'ils doivent être fournis à la place.
la source
Dans le cas de fichiers source, je pense que la meilleure façon est .conf pour les fichiers qui configurent votre script et .shlib ou .shlibs pour les fichiers qui ont des fonctions ou d'autres utilitaires.
Si vous voulez empêcher votre script de s'exécuter avec le mauvais shell et que le hashbang ne vous suffit pas, vous pouvez utiliser ceci:
la source
/proc/$$/exe
, vous pourriez aussi bien le faire aussicase $(readlink "/proc/$$/exe") in */bash)...
, mais ici, je voudrais simplement utiliser:if [ -z "$BASH_VERSION" ]
. (echo
devrait l'êtreecho >&2
). (Je vous aime.conf
ou.shlibs
(mais pour les fichiers sh) les extensions bien que cela ne puisse pas aider les surligneurs de syntaxe qui dépendent de l'extension).