Je voudrais récupérer le nom de fichier absolu du fichier de script actuellement exécuté. Les liens doivent également être résolus.
Sous Linux, cela semble se faire comme ceci:
$(readlink -mn "$0")
mais readlink
semble fonctionner très différemment sur Mac OS X.
J'ai lu que cela se fait en utilisant
$(realpath $0)
en BSD mais cela ne fonctionne pas non plus. Mac OS X n'en a pas realpath
.
Une idée?
Réponses:
Je triche et utilise perl pour cette chose:
On pourrait penser que j'écrirais tout le script en perl, et souvent je le fais, mais pas toujours.
la source
la source
unset -v CDPATH
avant le cd car le cd peut provoquer une sortie indésirable si CDPATH est défini.scriptDir=$(unset -v CDPATH; cd "$(dirname "$(readlink "$BASH_SOURCE" || echo "$BASH_SOURCE)")" && pwd -P)
Cela gère les combinaisons de liens symboliques et fonctionne sur les fichiers et dossiers:
Mais il ne prend pas en charge --relative-to de realpath. Cela nécessiterait la conversion décrite ici .
la source
Une autre approche:
la source