Получить имя каталога, в котором выполняется скрипт - PullRequest
4 голосов
/ 30 июля 2010

У меня есть сценарий, который использует файлы в каталогах вокруг него. Использует

dirname $0

команда. Он должен работать из любого каталога, где я запускаю этот скрипт, но когда я запускаю символическую ссылку, которая указывает на этот скрипт, я получаю путь символической ссылки. Таким образом, я получаю вывод dirname, а не путь самого скрипта.

Кто-нибудь знает способ получить путь, по которому запускается скрипт?

Ответы [ 4 ]

4 голосов
/ 30 июля 2010

Получить реальный путь к вашему сценарию

if [ -L $0 ] ; then
    ME=$(readlink $0)
else
    ME=$0
fi
DIR=$(dirname $ME)
0 голосов
/ 11 августа 2015

Более простое решение:

dirname $(readlink -f $0)

Протестировано в Ubuntu 14.04: which java возвращает /usr/bin/java, что является символической ссылкой.

readlink -f `which java`

Возвращает /usr/lib/jvm/java-8-oracle/jre/bin/java

Наконец,

dirname $(readlink -f `which java`)

Возвращает /usr/lib/jvm/java-8-oracle/jre/bin, которая является папкой, в которой находится «java».

0 голосов
/ 30 июля 2010

Если я не понимаю вас, проблема должна быть такой же, как и в: Как вы нормализуете путь к файлу в Bash?

Опция, не упомянутая здесь, это следующий pythonодна строка:

python2.6 -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"

Наконец, не забывайте использовать двойные кавычки вокруг "$ 0".

0 голосов
/ 30 июля 2010

если у вас установлено realpath:

$(dirname $(realpath $0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...