Сценарий оболочки - зная путь включения, затем включите другой файл - PullRequest
0 голосов
/ 23 декабря 2018

Что я хочу?

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

Подробности

НЕТ bash, только оболочка POSIX, интерпретатором будет / bin / sh, скрипт будет запускаться из любого места, не только из его собственной папки, но также может включать где угодно, но может быть относительным.

Структура файла:

.
-- folder1
|   \ main.sh
-- folder2
|   \ incl1.sh
-- folder3
    \ incl2.sh

Содержимое файла:

main.sh:

THIS_FILE=$(readlink -f "${0}");
BASEDIR=$(dirname "${THIS_FILE}");
. "${BASEDIR}/incl1/incl1.sh";

incl1.sh:

. pathThatIDontKnow/incl2.sh

incl2.sh, контент не релевантный, просто должен быть включен в incl1.sh

Подробнее:

Проблема в incl1, я не могу включить incl2, не зная мой текущий путь, иНевозможно включить incl2 в main.sh.

Важно отметить, что это может быть новый файл main2.sh, который пытается включить те же файлы тем же способом, это не исключение для main.sh иНе обязательно находиться в той же папке, что и main.sh.

Есть мысли?это технически возможно?

Заранее спасибо!

1 Ответ

0 голосов
/ 24 декабря 2018

Ну, немного подумав, по-моему, я не могу решить это так, как я думаю в первую очередь, поэтому я атакую ​​проблему с другой точки зрения: определение в каждой системе корневого пути скриптовпеременная как глобальная.

Таким образом, я экспортирую глобальную переменную следующим образом:

export SCRIPT_ROOT=path/to/root/scripts

Она может быть определена в разных местах, например, profile.d.

Затем в incl1Я добавлю строку импорта следующим образом:

. "$SCRIPT_ROOT/folder3/incl2.sh";

$ SCRIPTS_ROOT можно использовать везде.

Надеюсь, это поможет кому-то еще.

...