web-dev-qa-db-fra.com

DIR = "$ (cd" $ (dirname "$ {BASH_SOURCE [0]}") "&& pwd)" Comment ça marche?

J'ai besoin de connaître le chemin du script. Je peux le faire en utilisant pwd si je suis déjà dans le même répertoire, j'ai cherché en ligne et j'ai trouvé ceci

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Mais je ne sais pas comment utiliser ça.

32
Anirudh

Bash conserve un certain nombre de variables, dont BASH_SOURCE, Qui est un tableau de noms de chemin d'accès au fichier source.

${} Agit comme une sorte de citation pour les variables.

$() agit comme une sorte de citation pour les commandes mais elles sont exécutées dans leur propre contexte.

dirname vous donne la portion de chemin de l'argument fourni.

cd change le répertoire actuel.

pwd donne le chemin actuel.

&& Est un and logique mais il est utilisé dans cette instance pour son effet secondaire d'exécuter des commandes les unes après les autres.

En résumé, cette commande récupère le chemin du fichier source du script, l’élimine à la portion du chemin, cds à ce chemin, puis utilise pwd pour renvoyer le chemin complet (en réalité) du script. Ceci est attribué à DIR. Après tout cela, le contexte est décomposé et vous vous retrouvez dans le répertoire dans lequel vous avez commencé, mais avec une variable d’environnement DIR contenant le chemin du script.

36
Ouroborus