Lorsque vous sourcez un script shell, la ligne shebang est ignorée. En insérant un shebang non valide, vous pouvez avertir l'utilisateur que le script a été exécuté par erreur:
#!/bin/bash source-this-script
# ...
Le message d'erreur sera le suivant:
/bin/bash: source-this-script: No such file or directory
Le nom de l'argument (arbitraire) fournit déjà un indice fort, mais le message d'erreur n'est toujours pas clair à 100%. Nous pouvons résoudre ce problème avec un script utilitaire source-this-script
placé quelque part dans votre PATH
:
#!/bin/sh
echo >&2 "This script must be sourced, not executed${1:+: }${1:-!}"
exit 1
Maintenant, le message d'erreur sera ceci:
This script must be sourced, not executed: path/to/script.sh
Comparaison avec d'autres approches
Comparée aux autres réponses, cette approche ne nécessite que des modifications minimes de chaque script (et avoir une ligne shebang facilite la détection du type de fichier dans les éditeurs et spécifie le dialecte du script shell, ce qui présente même des avantages). L'inconvénient est un message d'erreur quelque peu flou, ou l'ajout (ponctuel) d'un autre script shell.
Cela n'empêche cependant pas l'invocation explicite via bash path/to/script.sh
(merci @muru!).
x
, qui ne contient que la commande. your-script-to-be-sourced
, tout va bien, mais s'il veut l'exécuter,bash your-script-to-be-sourced
cela devrait être interdit? Quel est le but de cette restriction?