Shell Script Loader è la mia soluzione per questo.
Fornisce una funzione chiamata include () che può essere richiamata più volte in molti script per fare riferimento a un singolo script ma caricherà lo script una sola volta. La funzione può accettare percorsi completi o percorsi parziali (lo script viene cercato in un percorso di ricerca). Viene inoltre fornita una funzione simile denominata load () che carica incondizionatamente gli script.
Funziona con bash , ksh , pd ksh e zsh con script ottimizzati per ognuno di essi; e altre shell genericamente compatibili con lo sh originale come ash , dash , sh heirloom , ecc., attraverso uno script universale che ottimizza automaticamente le sue funzioni a seconda delle funzionalità che la shell può fornire.
[Esempio imminente]
start.sh
Questo è uno script iniziale opzionale. Inserire qui i metodi di avvio è solo una comodità e può essere inserito nello script principale. Questo script non è inoltre necessario se gli script devono essere compilati.
#!/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
# ...
cenere
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 ----'
produzione:
---- b.sh ----
---- a.sh ----
---- main.sh ----
La cosa migliore è che gli script basati su di esso possono anche essere compilati per formare un singolo script con il compilatore disponibile.
Ecco un progetto che lo utilizza: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Può essere eseguito in modo portabile con o senza compilare gli script. La compilazione per produrre un singolo script può anche accadere ed è utile durante l'installazione.
Ho anche creato un prototipo più semplice per qualsiasi partito conservatore che potrebbe voler avere una breve idea di come funziona uno script di implementazione: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . È piccolo e chiunque può semplicemente includere il codice nel proprio script principale se lo desidera se il suo codice è destinato a funzionare con Bash 4.0 o versioni successive e inoltre non lo utilizza eval
.