четверг, 19 января 2012 г.

BASH скрипт, определение полного пути к рабочей директории.

Часто есть необходимость в точном позиционировании на файловой системе относительно выполняемого bash скрипта. Например, я веду лог файл выполнения скрипта и размещаю его рядом с самим скриптом с именем name_of_my_bash_script.sh.log.


Вот как реализовываем:


script_pwd=$(cd $(dirname "$0"); pwd)
logfile=${script_pwd}/`basename ${0}`.log



Хочу, дополнительно, прокомментировать написанную выше конструкцию. Она позволяет определить полный путь к лог-файлу (а не относительный от самого скрипта), что в свою очередь позволяет избежать проблем при запуске скрипта из разных мест файловой системы, а также при изменении рабочей директории в процессе выполнения скрипта.

3 комментария:

  1. Ок. но забываете про экранирование пробелов

    ОтветитьУдалить
  2. невижу где здесь есть необходимость в экранировании...

    ОтветитьУдалить
  3. да, если в путях будут пробелы или спец. символы будут проблемы...
    решение следующее:
    script_pwd=$(cd "$(dirname "$0")"; pwd)
    logfile=${script_pwd}/`basename ${0}`.log
    и обращение к лог файлу
    touch "$logfile"

    ОтветитьУдалить