72 votes

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}"" && pwd )" Comment cela fonctionne-t-il ?

J'ai besoin d'obtenir 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 l'utiliser.

0 votes

Avez-vous essayé, c'est-à-dire echo "script=$0 dirForScript=$DIR" ? Vous devez montrer ce que vous avez essayé pour résoudre votre problème. Si vous mettez votre DIR=... et mon echo script=... dans un script et appeler le script principal à partir de différents répertoires, vous devriez voir le même résultat. Si ce n'est pas le cas, alors c'est une Q intéressante et vous pouvez mettre à jour votre Q en indiquant pourquoi cela "ne fonctionne pas" . Bonne chance.

0 votes

Donc, j'ai le code ci-dessous dans mon fichier script maintenant : #!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "script=$0 dirForScript=$DIR et j'essaie de l'exécuter à partir d'un répertoire différent et il dit : -bash : Send-Transaction.sh : commande non trouvée

0 votes

Pour l'exécuter, j'utilise sh filename.sh. Est-ce que je fais quelque chose de mal ou est-ce que tout est faux ?

97voto

Ouroborus Points 6000

Bash maintient un certain nombre de variables, notamment BASH_SOURCE qui est un tableau de chemins 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 partie chemin de l'argument fourni.

cd change le répertoire courant.

pwd donne le chemin actuel.

&& est une logique and mais il est utilisé dans ce cas pour son effet secondaire qui consiste à exécuter les commandes les unes après les autres.

En résumé, cette commande récupère le chemin d'accès au fichier source du script et le réduit à la portion chemin d'accès, cd à ce chemin, puis utilise pwd pour retourner le chemin (effectivement) complet du script. Ceci est assigné à DIR . Après tout cela, le contexte est déroulé et vous vous retrouvez dans le répertoire de départ mais avec une variable d'environnement DIR contenant le chemin du script.

0 votes

Merci pour la réponse, alors est-ce que cela me dit où se trouve mon fichier script si je l'exécute avec filename.sh dans un répertoire quelconque ?

0 votes

@Anirudh Indirectement. Il le stocke dans une variable d'environnement plutôt que de l'afficher simplement sur la console. C'est au script de décider ce qu'il advient de l'information.

0 votes

Mon script contient le code suivant : #!/usr/bin/env bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "script=$0 dirForScript=$DIR" source Demo-Commons.sh sendTransaction < Send-Transaction.json et j'essaie de l'exécuter à partir d'un répertoire différent mais il dit filename.sh non trouvé dans le répertoire, pourquoi ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X