Я хотел бы получить абсолютное имя файла сценария, который в данный момент выполняется. Ссылки тоже должны быть разрешены.
В Linux это, кажется, делается так:
$(readlink -mn "$0")
но, readlink
похоже, работает совсем по- другому на Mac OS X.
Я читал, что это делается с помощью
$(realpath $0)
в BSD, но это тоже не работает. Mac OS X не имеет realpath
.
Любая идея?
Ответы:
Я обманываю и использую Perl для этой вещи:
Вы бы подумали, что я просто напишу весь скрипт на Perl, и часто я делаю, но не всегда.
источник
источник
unset -v CDPATH
до появления cd, поскольку cd может вызвать нежелательный вывод, если установлен CDPATH.scriptDir=$(unset -v CDPATH; cd "$(dirname "$(readlink "$BASH_SOURCE" || echo "$BASH_SOURCE)")" && pwd -P)
Это обрабатывает комбинации символических ссылок и работает с файлами и папками:
Но он не поддерживает realpath -relative-to. Это потребует преобразования, описанного здесь .
источник
Другой подход:
источник