Chciałbym odzyskać bezwzględną nazwę pliku skryptu, który jest aktualnie wykonywany. Linki również powinny zostać rozwiązane.
W systemie Linux wygląda to tak:
$(readlink -mn "$0")
ale readlink
wydaje się działać zupełnie inaczej w Mac OS X.
Przeczytałem, że odbywa się to za pomocą
$(realpath $0)
w BSD, ale to też nie działa. Mac OS X nie ma realpath
.
Dowolny pomysł?
Odpowiedzi:
Oszukuję i używam perla do tego właśnie:
Można by pomyśleć, że po prostu napiszę cały skrypt w perlu, i często to robię, ale nie zawsze.
źródło
źródło
unset -v CDPATH
wcześniejsze przejście do cd, ponieważ cd może powodować niechciane wyjście, jeśli ustawiony jest CDPATH.scriptDir=$(unset -v CDPATH; cd "$(dirname "$(readlink "$BASH_SOURCE" || echo "$BASH_SOURCE)")" && pwd -P)
To obsługuje kombinacje dowiązań symbolicznych i działa na plikach i folderach:
Ale nie obsługuje realpath - w odniesieniu do. Wymagałoby to opisanej tutaj konwersji .
źródło
Inne podejście:
źródło