См .: BASH FAQ # 28: "Как определить местоположение моего скрипта? Я хочу прочитать некоторые файлы конфигурации из того же места."
Любое решение не будет работать 100% времени:
Важно понимать, что в общем случае эта проблема не имеет решения. Любой подход, о котором вы, возможно, слышали, и любой подход, который будет подробно описан ниже, имеет недостатки и будет работать только в определенных случаях. Прежде всего, постарайтесь полностью избежать этой проблемы, не завися от местоположения вашего скрипта!
Если вам нужно написать очень инструмент для многократного использования, тогда использование правильного пути в качестве параметра для вашего сценария будет самым надежным методом .
Предполагая, что ваш сценарий будет запускаться только из определенных оболочек, и только с небольшой необходимой гибкостью, вы, вероятно, можете ослабить эту паранойю. Все еще хорошо смотреть на ваши варианты. Существуют общие модели, которые люди используют, которые особенно проблематичны.
В частности, в FAQ рекомендуется избегать использования очень часто используемой $0
переменной:
Ничто с надписью $0
никогда не будет пуленепробиваемым, потому что $0
сам по себе ненадежен.
В качестве альтернативы вы можете использовать $BASH_SOURCE
. Примерно так:
source "${BASH_SOURCE%/*}/act.conf.sh"
В этом решении также есть некоторые предостережения. Проверьте страницу часто задаваемых вопросов, чтобы увидеть компромиссы между различными решениями. Кажется, они рекомендуют cd
в сочетании с $BASH_SOURCE
в тех случаях, когда это будет работать для вас, поскольку вы получаете удобное условие ошибки, когда он не может правильно развернуться.