Shell Script Loader est ma solution pour cela.
Il fournit une fonction nommée include () qui peut être appelée plusieurs fois dans de nombreux scripts pour faire référence à un seul script mais ne chargera le script qu'une seule fois. La fonction peut accepter des chemins complets ou des chemins partiels (le script est recherché dans un chemin de recherche). Une fonction similaire nommée load () est également fournie qui chargera les scripts sans condition.
Il fonctionne pour bash , ksh , pd ksh et zsh avec des scripts optimisés pour chacun d'eux; et d'autres shells qui sont génériquement compatibles avec le sh d'origine comme ash , dash , heirloom sh , etc., grâce à un script universel qui optimise automatiquement ses fonctions en fonction des fonctionnalités que le shell peut fournir.
[Exemple présenté]
start.sh
Il s'agit d'un script de démarrage facultatif. Placer les méthodes de démarrage ici n'est qu'une commodité et peut être placé à la place dans le script principal. Ce script n'est également pas nécessaire si les scripts doivent être compilés.
#!/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
# ...
cendre
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 ----'
production:
---- b.sh ----
---- a.sh ----
---- main.sh ----
Ce qui est le mieux, c'est que les scripts basés dessus peuvent également être compilés pour former un seul script avec le compilateur disponible.
Voici un projet qui l'utilise: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Il peut s'exécuter de manière portable avec ou sans compilation des scripts. La compilation pour produire un seul script peut également se produire et est utile lors de l'installation.
J'ai également créé un prototype plus simple pour toute partie conservatrice qui voudrait avoir une brève idée du fonctionnement d'un script d'implémentation: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . Il est petit et n'importe qui peut simplement inclure le code dans son script principal s'il le souhaite si son code est destiné à fonctionner avec Bash 4.0 ou plus récent, et il ne l'utilise pas non plus eval
.