J'ai un script qui est jonché autour de mon système de fichiers (effet secondaire d'un processus de construction) qui définit certaines variables d'environnement globales (LD_LIBRARY_PATH, PATH, ROOTDIR, etc.) qui doivent être dans mon shell pour un fonctionnement correct. Bien sûr, cela signifie que je dois source script.sh
ou . script.sh
pour le faire fonctionner, et non ./script.sh
(ce qui engendrerait un nouveau shell et ne définirait pas les variables dans mon shell actuel).
Puis-je ajouter quelque chose au script pour empêcher (ou avertir) quelqu'un de courir ./script.sh
?
Une autre option peut être de supprimer les autorisations d'exécution. Dans ce cas, il ne peut pas être exécuté, mais il peut toujours être obtenu.
la source
bash script
indépendamment de l'indicateur d'exécution sur un script. Toujours sous Cygwin (cela compte-t-il?), Vous ne pouvez pas retirer les drapeaux d'exécution.En plus de vérifier $ 0 ( réponse Mikel ) peut être utile pour changer l'extension de .sh en .src, par exemple. Cela aidera à comprendre quiconque ne devrait pas exécuter ce script.
la source
Créez un interpréteur personnalisé
source_reminder
:N'oubliez pas de le rendre exécutable. Ensuite, utilisez-le simplement dans votre script:
Maintenant, si vous exécutez le script sans sourcing, le rappel fera son travail.
la source
#!/bin/echo do not execute
ou#!/bin/false
ou#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. Cependant, cela n'attrape pas le cas où le script est exécuté avec quelque chose commesh script
(car cela ignore le Shebang).