Итак, пишу я bash скрипт для автоматизации всяких deployment задач. Долго мучался чтобы правильно определить папку в которой лежит запускаемый скрипт. `pwd` выдает директорию из которой запускается команда (например если я нахожусь в папке /home/user и запускаю скрипт как ./bin/script.sh, то ROOT_DIR=`pwd` будет иметь значение /home/user вместо /home/user/bin), а ROOT_DIR=$0 вернет относительный путь (в нашем примере ./bin/script.sh)
Найдя решение в одном из своих старых скриптов, подумал что создатели Bash курили то же что и создатели Perl. Решение краткое, но придумать его не так просто.
#!/usr/bin/env bash ROOT_PATH=$(cd $(dirname $0) && pwd); echo $ROOT_PATH;
Теперь в переменной ROOT_PATH будет путь к директории в которой лежит скрипт, и нам не стоит задумываться из какой директории запускать скрипт чтобы избежать неожиданных проблем.
Happy Coding .
агромаднейшее спасибо, это именно то, что было надо :)
ReplyDeletePATH=$(cd ${0%/*} && pwd)/${0##*/}
и от меня
DeleteИ от меня
DeleteПрисоединяюсь! Гениально!
ReplyDeleteСпасибо. Именно то что было нужно. Помогло при развёртывании jango приложения, когда нужно было импортировать sql схему.
ReplyDelete