Получить имя каталога, в котором выполняется скрипт
У меня есть сценарий, который использует файлы в каталогах вокруг него. Оно использует
dirname $0
команда. Он должен работать из любого каталога, в котором я запускаю этот скрипт, но когда я запускаю символическую ссылку, которая указывает на этот скрипт, я получаю путь символической ссылки. Поэтому я получаю вывод dirname, а не путь самого скрипта.
Кто-нибудь знает способ получить путь, где скрипт запускается?
4 ответа
Получить реальный путь к вашему сценарию
if [ -L $0 ] ; then
ME=$(readlink $0)
else
ME=$0
fi
DIR=$(dirname $ME)
Более простое решение:
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".
Если у вас есть realpath
установлены:
$(dirname $(realpath $0))
Если я не понимаю вас, проблема должна быть такой же, как и в: Как вы нормализуете путь к файлу в Bash?
Опция, не упомянутая здесь, это следующая однострочная строка:
python2.6 -c "import os,sys; print os.path.realpath(sys.argv[1])" "$0"
Наконец, не забудьте использовать двойные кавычки вокруг "$0".