On utilise ici une particularité de bash donc attention si vous n’utilisez pas le même shell.
La prise de variable se fait comme ceci :
DIR_SCRIPT="$(cd "$(dirname "${BASH_SOURCE[0]}")" > /dev/null 2>&1 && pwd)"
Découpons tout ceci.
Premièrement, DIR_SCRIPT
est le nom de la variable que nous pourrons utiliser ensuite.
Ensuite, $(cd "$(dirname "${BASH_SOURCE[0]}")"
que nous allons découper en plusieurs parties.
– La plus importante à comprendre : ${BASH_SOURCE[0]}
C’est ici que se joue la particularité à bash de ce script. BASH_SOURCE[0] (ou BASH_SOURCE) contient le chemin (potentiellement relatif) du script qui y fait appel dans tous les scénarios d’invocation possible. Ceci inclue lorsque le script est sourcé, ce qui n’est pas le cas de $0
communément utilisé. $0
est un composant de la spécification POSIX pour les shell alors que BASH_SOURCE
, comme son nom l’indique, est spécifique à bash.
– Ensuite dirname
permet d’enlever le dernier composant du nom du fichier
– Finalement, cd
redirige le script dans ce dossier identifié
Nous redirigeons ensuite avec > /dev/null 2>&1
toute erreur d’affichage ou tout affichage vers /dev/null.
Enfin, nous exécutons pwd
dans le nouvel emplacement où nous nous trouvons afin d’en récupérer le chemin absolu. Le résultat de toutes ces opérations est ensuite stocké dans notre variable DIR_SCRIPT
.