Shell Script Loader - це моє рішення для цього.
Він надає функцію з назвою include (), яку можна викликати багато разів у багатьох сценаріях для посилання на один сценарій, але завантажить сценарій лише один раз. Функція може приймати цілі шляхи або часткові шляхи (сценарій шукається в шляху пошуку). Також передбачена аналогічна функція з назвою load (), яка буде беззастережно завантажувати сценарії.
Він працює для bash , ksh , pd ksh та zsh з оптимізованими сценаріями для кожного з них; та інші оболонки, які загалом сумісні з оригінальним ш, як попел , тире , реліквія sh тощо, за допомогою універсального сценарію, який автоматично оптимізує його функції залежно від особливостей, які може надати оболонка.
[Прикладний приклад]
start.sh
Це необов'язковий початковий сценарій. Розміщення методів запуску тут - лише зручність і замість цього може бути розміщено в основному сценарії. Цей сценарій також не потрібен, якщо сценарії потрібно складати.
#!/bin/sh
# load loader.sh
. loader.sh
# include directories to search path
loader_addpath /usr/lib/sh deps source
# load main script
load main.sh
main.sh
include a.sh
include b.sh
echo '---- main.sh ----'
# remove loader from shellspace since
# we no longer need it
loader_finish
# main procedures go from here
# ...
зола
include main.sh
include a.sh
include b.sh
echo '---- a.sh ----'
б.ш
include main.sh
include a.sh
include b.sh
echo '---- b.sh ----'
вихід:
---- b.sh ----
---- a.sh ----
---- main.sh ----
Найкраще, що сценарії на його основі також можуть бути складені для формування єдиного сценарію з доступним компілятором.
Ось проект, який його використовує: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Він може працювати портативно з або без складання скриптів. Складання компіляції для створення єдиного сценарію також може бути корисним під час встановлення.
Я також створив більш простий прототип для будь-якої консервативної сторони, яка, можливо, захоче мати коротке уявлення про те, як працює сценарій реалізації: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .баш . Він невеликий, і кожен може просто включити код у свій основний сценарій, якщо захоче, якщо їх код призначений для роботи з Bash 4.0 або новішою версією, і він також не використовується eval.