Essayez les simples lignes simples suivantes:
Pour tous UNIX / OSX / Linux
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
Frapper
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
Remarque: Un double tiret (-) est utilisé dans les commandes pour signifier la fin des options de commande, afin que les fichiers contenant des tirets ou d'autres caractères spéciaux ne cassent pas la commande.
Remarque: Dans Bash, utilisez ${BASH_SOURCE[0]}
en faveur de $0
, sinon le chemin peut se casser lors de son sourcing ( source
/ .
).
Pour Linux, Mac et autres * BSD:
cd "$(dirname "$(realpath "$0")")";
Remarque: realpath
devrait être installé par défaut dans la distribution Linux la plus populaire (comme Ubuntu), mais dans certains cas, il peut être manquant, vous devez donc l'installer.
Remarque: Si vous utilisez Bash, utilisez ${BASH_SOURCE[0]}
en faveur de $0
, sinon le chemin peut se casser lors de son sourcing ( source
/.
).
Sinon, vous pouvez essayer quelque chose comme ça (il utilisera le premier outil existant):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
Pour Linux spécifique:
cd "$(dirname "$(readlink -f "$0")")"
Utilisation de GNU readlink sur * BSD / Mac:
cd "$(dirname "$(greadlink -f "$0")")"
Remarque: Vous devez avoir coreutils
installé (par exemple 1. Installez Homebrew , 2. brew install coreutils
).
En bash
Dans bash, vous pouvez utiliser des extensions de paramètres pour y parvenir, comme:
cd "${0%/*}"
mais cela ne fonctionne pas si le script est exécuté à partir du même répertoire.
Vous pouvez également définir la fonction suivante dans bash:
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
Cette fonction prend 1 argument. Si l'argument a déjà un chemin absolu, imprimez-le tel quel, sinon imprimez l' $PWD
argument variable + nom de fichier (sans ./
préfixe).
ou voici la version tirée du .bashrc
fichier Debian :
function realpath()
{
f=$@
if [ -d "$f" ]; then
base=""
dir="$f"
else
base="/$(basename "$f")"
dir=$(dirname "$f")
fi
dir=$(cd "$dir" && /bin/pwd)
echo "$dir$base"
}
En relation:
Voir également:
Comment puis-je obtenir le comportement de readlink -f de GNU sur un Mac?