web-dev-qa-db-fra.com

Comment obtenir le vrai chemin d'un fichier sh en cours de sourcing

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.

3
EnZo

Utilisez simplement BASH_SOURCE au lieu de $0:

realpath ${BASH_SOURCE}

dans votre script:

REAL=$(realpath ${BASH_SOURCE})
6
Ravexina

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)

6
Byte Commander