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