J'ai ajouté cette ligne dans mon ~/.bashrc
. /mnt/c/Users/enzo/drive/projects/dotfiles/init.sh
Et à l'intérieur de init.sh, j'essaie d'obtenir le chemin de init.sh
mais je ne le peux pas.
J'ai essayé jusqu'à présent:
CURDIR=`/bin/pwd`
BASEDIR=$(dirname $0)
ABSPATH=$(readlink -f $0)
ABSDIR=$(dirname $ABSPATH)
REAL=$(realpath $0)
echo "CURDIR is $CURDIR"
echo "BASEDIR is $BASEDIR"
echo "ABSPATH is $ABSPATH"
echo "ABSDIR is $ABSDIR"
echo "REAL is $REAL"
Sortie:
CURDIR is /mnt/c/Users/enzo
BASEDIR is /bin
ABSPATH is /bin/bash
ABSDIR is /bin
REAL is /bin/bash
Je suis sous le sous-système Windows pour Linux.
Utilisez simplement BASH_SOURCE
au lieu de $0
:
realpath ${BASH_SOURCE}
dans votre script:
REAL=$(realpath ${BASH_SOURCE})
Lorsque vous source un script Bash, $0
ne contiendra pas le nom de votre script source, mais de l'exécutable Bash.
Vous devez plutôt lire la valeur de $BASH_SOURCE
afin que le chemin absolu du répertoire de votre script soit
SCRIPT_DIR="$(realpath "$(dirname "$BASH_SOURCE")")"
Connexes: choix entre $ 0 et BASH_SOURCE (débordement de pile)