Est-il possible d'obtenir le chemin d'un script bash lorsqu'il est utilisé dans la commande source

4

Je veux définir une variable d'environnement par rapport à l'emplacement d'un script. Je peux facilement le trouver et le définir pour la durée du script (test.sh):

#!/bin/bash
export MY_VARIABLE=$(dirname $0)
echo MY_VARIABLE is : $MY_VARIABLE

Appel:

./test.sh

Sortie:

MY_VARIABLE is : .

Si je veux utiliser la variable dans d'autres scripts, je dois la définir avec la commande source. Cela ne fonctionne bien sûr pas car je n’appelle plus le script test.sh, mais la commande source.

source test.sh

Sortie:

dirname: illegal option -- b
usage: dirname path
MY_VARIABLE is :

Existe-t-il un moyen de définir une variable d'environnement dans un script qui puisse ensuite être utilisée avec la commande source?

Sacha Guyer
la source
Voir cette question SO , et BashFAQ # 28 .
Gordon Davisson
1
@GordonDavisson Merci pour cet indice. Utiliser $ BASH_SOURCE au lieu de $ 0 fonctionne bien et je peux résoudre mon problème. Il ne me manque que 4 points de réputation pour répondre à la question et accepter la réponse. Voici donc la réponse dans le commentaire. Cette solution fonctionne bien pour les chemins relatifs, ce qui est correct dans mon cas: test.sh #! / Bin / bash echo pwd / dir: $ (PWD) / $ (dirname $ BASH_SOURCE)
Sacha Guyer
@SachaGuyer, je viens de vous donner quelques votes, vous devriez avoir le représentant pour le faire maintenant.
webmarc

Réponses:

2

test2.sh:

#!/bin/bash
MY_VARIABLE=$(PWD)/$(dirname $BASH_SOURCE)
echo MY_VARIABLE is : $MY_VARIABLE

Appel:

./test2.sh

Sortie:

MY_VARIABLE is : /some/path/.

Appel:

source ./test2.sh

Sortie:

MY_VARIABLE is : /some/path/.

Merci @webmark et @GordonDavisson.

Sacha Guyer
la source