Получение пути вызывающего скрипта из скрипта bash - PullRequest
0 голосов
/ 15 апреля 2020

В одном из моих bash сценариев я использую переменную, которая содержит путь к сценарию. Эта переменная установлена ​​следующим образом:

current_folder=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

Поскольку этот скрипт является частью нескольких, я хочу переместить этот код в глобальный импортированный скрипт. Но логически тогда переменная заполняется путем глобального сценария.

/ MyProgram / common / globals. sh

current_folder=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

/ MyProgram / modules / myscript. sh

. /MyProgram/common/globals.sh

echo "$current_folder" # Returns /MyProgram/common

Есть ли способ сделать это без создания функции и передачи исходного пути в качестве параметра? Необходимость создавать код для каждого сценария в каждом запросе на использование пути кажется контрпродуктивной.

1 Ответ

0 голосов
/ 15 апреля 2020

Как указал Гленн Джекман, простая замена индекса в BASH_SOURCE на 1 решает проблему.

В руководстве GNU формулируется определение для BASH_SOURCE как:

Переменная массива, члены которой являются исходными именами файлов, в которых определены соответствующие имена функций оболочки в переменной массива FUNCNAME. Функция оболочки $ {FUNCNAME [$ i]} определена в файле $ {BASH_SOURCE [$ i]} и вызвана из $ {BASH_SOURCE [$ i + 1]}

По определению получается предыдущий промежуточный скрипт в стеке вызовов будет равен 1, поэтому код в конечном итоге останется:

caller_path=$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...