6

Мне нужно написать скрипт, который будет вызываться из любого места, но должен запускаться из каталога, в котором он находится. Сценарий должен запросить свой каталог во время выполнения.

Как этого достичь?

Пример:

  • скрипт hello.sh находится в /someplace/
  • хотя он вызывается из /other/place/ ,
  • скрипт знает (во время выполнения), что он находится в /someplace

РЕДАКТИРОВАТЬ
Дополнительный вопрос:
Как насчет местоположения скрипта, но с символической ссылкой решена?

Пример:

  • скрипт hello.sh находится в /someplace/
  • символическая ссылка существует в /bin
  • хотя символическая ссылка вызывается из /other/place/ ,
  • скрипт знает (во время выполнения), что он находится в /someplace

3 ответа3

5
echo $(dirname $0)

или же

echo ${0%/*}
2

На мой дополнительный вопрос: я нашел это работать:

echo $(dirname $(readlink $0))

или же

echo `dirname \`readlink $0\``

РЕДАКТИРОВАТЬ
Кажется, этот ответ пришел одновременно с тем, что Деннис Уильямсон прокомментировал свой ответ решением проблемы;)

1

Проверьте переменную оболочки $ _

Из справочной страницы bash:

При запуске оболочки задайте абсолютный путь, используемый для вызова оболочки или сценария оболочки, выполняемого в том виде, как он был передан в среде или списке аргументов. Затем расширяется до последнего аргумента предыдущей команды после расширения. Также задайте полный путь, используемый для вызова каждой команды, выполненной и помещенной в среду, экспортированную в эту команду. При проверке почты этот параметр содержит имя проверяемого почтового файла.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .