Une norme / convention officielle pour une extension de fichier pour les scripts shell à la source

11

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:

  1. Si je veux exécuter ce script en sous-shell.

    ./script.sh 
  2. 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 .sourceou .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? ).

Mateusz Piotrowski
la source
1
Certaines personnes pensent que les scripts shell qui peuvent être exécutés par des exécutables (c'est-à-dire qu'ils commencent par #!/bin/shou 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.
the_velour_fog
1
Cela dépend de ce que c'est, vous pouvez avoir env, rc, conf etc
123
1
@ 123 il dépend, parfois une fois que vous construisez thats quelque chose d' utile et de le mettre dans $PATH, vous venez d'utiliser tout le temps, de sorte que son comme, ps, ls, curlet 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 ne chmod +xles utiliserais pas et je les nommerais script.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.
the_velour_fog
5
Il n'y a pas de convention. Si vous êtes dans une entreprise ou si vous collaborez à un projet de partage (par exemple opensource), vous pouvez avoir des normes locales à respecter, mais il n'y a pas de convention de facto.
Stephen Harris
1
Le mot «convention» (signifiant # 2) est ce qui mène probablement à des réponses «basées sur l'opinion». La spécification de groupe ouvert pour la source n'applique aucune norme de dénomination.
Jeff Schaller

Réponses:

18

J'utiliserais .sh(pour les fichiers en shlangage POSIX , .bashpour les bashfichiers 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:

#! /bin/echo Please-source

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.

Stéphane Chazelas
la source
Vous pouvez également quitter si le script n'est pas d'origine ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski
4

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:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi
Luciano Andress Martini
la source
1
Si vous allez utiliser Linux spécifique /proc/$$/exe, vous pourriez aussi bien le faire aussi case $(readlink "/proc/$$/exe") in */bash)..., mais ici, je voudrais simplement utiliser: if [ -z "$BASH_VERSION" ]. ( echodevrait l'être echo >&2). (Je vous aime .confou .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).
Stéphane Chazelas
Oui, je vois ce fichier .shlibs, dans une sorte de programme que je télécharge, mais je ne m'en souviens pas, j'ai donc commencé à l'utiliser. Merci beaucoup pour l'astuce, je vais éditer la question avec la version readlink beaucoup plus belle. ;-)
Luciano Andress Martini
@ StéphaneChazelas La mise en évidence de la syntaxe peut être déclenchée par des métadonnées dans les fichiers eux-mêmes (au moins pour Emacs et Vim), donc le choix de l'extension du nom de fichier est sans importance à cet égard.
Kusalananda