December 10, 2009

Как получить директорию из которой запускается bash скрипт?

Ух, давно не писАл в свой блог. Заметил что иногда обращаюсь к своим же постам чтобы посмотреть решение о котором писал ранее. Вот и сейчас решил запостить коротенькую заметочку.

Итак, пишу я 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 .

5 comments:

  1. агромаднейшее спасибо, это именно то, что было надо :)
    PATH=$(cd ${0%/*} && pwd)/${0##*/}

    ReplyDelete
  2. Присоединяюсь! Гениально!

    ReplyDelete
  3. Спасибо. Именно то что было нужно. Помогло при развёртывании jango приложения, когда нужно было импортировать sql схему.

    ReplyDelete