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