Shell Script Loader to moje rozwiązanie.
Zapewnia funkcję o nazwie include (), która może być wywoływana wiele razy w wielu skryptach w celu odniesienia jednego skryptu, ale załaduje skrypt tylko raz. Funkcja może akceptować pełne lub częściowe ścieżki (skrypt jest przeszukiwany w ścieżce wyszukiwania). Zapewniona jest również podobna funkcja o nazwie load (), która bezwarunkowo ładuje skrypty.
Działa dla bash , ksh , pd ksh i zsh ze zoptymalizowanymi skryptami dla każdego z nich; oraz inne powłoki, które są ogólnie kompatybilne z oryginalnym sh, takie jak ash , dash , heirloom sh itp., poprzez uniwersalny skrypt, który automatycznie optymalizuje swoje funkcje w zależności od funkcji, które może zapewnić powłoka.
[Przyjęty przykład]
start.sh
To jest opcjonalny skrypt startowy. Umieszczenie tutaj metod uruchamiania jest tylko wygodą i można je zamiast tego umieścić w skrypcie głównym. Ten skrypt nie jest również potrzebny, jeśli skrypty mają zostać skompilowane.
#!/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
# ...
popiół
include main.sh
include a.sh
include b.sh
echo '---- a.sh ----'
b.sh
include main.sh
include a.sh
include b.sh
echo '---- b.sh ----'
wynik:
---- b.sh ----
---- a.sh ----
---- main.sh ----
Najlepsze są oparte na nim skrypty, które można również skompilować w celu utworzenia pojedynczego skryptu z dostępnym kompilatorem.
Oto projekt, który go wykorzystuje: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Może działać przenośnie z kompilacją skryptów lub bez. Kompilacja w celu utworzenia pojedynczego skryptu może się również zdarzyć i jest pomocna podczas instalacji.
Stworzyłem również prostszy prototyp dla każdej partii konserwatywnej, która może chcieć mieć krótkie wyobrażenie o tym, jak działa skrypt implementacyjny: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . Jest mały i każdy może po prostu dołączyć kod do głównego skryptu, jeśli chce, jeśli jego kod ma działać z Bash 4.0 lub nowszym, a także nie używa eval
.