Voir : Entrée FAQ BASH #28 : "Comment déterminer l'emplacement de mon script ? Je veux lire certains fichiers de configuration au même endroit."
Toute solution ne fonctionnera pas à 100 % :
Il est important de comprendre que dans le cas général, ce problème n'a pas de solution. Toutes les approches dont vous avez pu entendre parler, et toutes celles qui seront détaillées ci-dessous, présentent des lacunes et ne fonctionneront que dans des cas spécifiques. Avant tout, essayez d'éviter le problème en ne dépendant pas de l'emplacement de votre script !
Si vous devez écrire un très outil réutilisable, alors La méthode la plus fiable consiste à prendre le chemin correct comme paramètre de votre script. .
En supposant que votre script ne sera exécuté qu'à partir de certains shells, et seulement avec un peu de flexibilité, vous pouvez probablement relâcher un peu de cette paranoïa. Il est tout de même bon d'examiner les options qui s'offrent à vous. Il existe des schémas courants que les gens utilisent et qui sont particulièrement problématiques.
En particulier, la FAQ recommande d'éviter l'utilisation très courante de l'option $0
variable :
Rien qui ne se lise $0
ne sera jamais à l'épreuve des balles, car $0
n'est pas fiable.
En guise d'alternative, vous pouvez utiliser $BASH_SOURCE
à la place. Quelque chose comme ça :
source "${BASH_SOURCE%/*}/act.conf.sh"
Cette solution présente également quelques inconvénients. Consultez la page FAQ pour voir les compromis entre les différentes solutions. Ils semblent recommander cd
en combinaison avec $BASH_SOURCE
dans les cas où cela fonctionnera pour vous, car vous obtiendrez une condition d'erreur pratique lorsqu'il ne se développera pas correctement.