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