Shell Script Loader ist meine Lösung dafür.
Es bietet eine Funktion namens include (), die in vielen Skripten mehrmals aufgerufen werden kann, um auf ein einzelnes Skript zu verweisen, das Skript jedoch nur einmal lädt. Die Funktion kann vollständige oder teilweise Pfade akzeptieren (das Skript wird in einem Suchpfad durchsucht). Eine ähnliche Funktion namens load () wird ebenfalls bereitgestellt, mit der die Skripte bedingungslos geladen werden.
Es funktioniert für bash , ksh , pd ksh und zsh mit optimierten Skripten für jedes von ihnen; und andere Shells, die generisch mit dem Original-Sh kompatibel sind, wie Asche , Armaturenbrett , Erbstück Sh usw., über ein universelles Skript, das seine Funktionen abhängig von den Funktionen, die die Shell bieten kann, automatisch optimiert.
[Geflügeltes Beispiel]
start.sh
Dies ist ein optionales Starterskript. Das Platzieren der Startmethoden hier ist nur eine Annehmlichkeit und kann stattdessen im Hauptskript platziert werden. Dieses Skript wird auch nicht benötigt, wenn die Skripte kompiliert werden sollen.
#!/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
# ...
Asche
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 ----'
Ausgabe:
---- b.sh ----
---- a.sh ----
---- main.sh ----
Das Beste daran ist, dass darauf basierende Skripte auch zu einem einzigen Skript mit dem verfügbaren Compiler kompiliert werden können.
Hier ist ein Projekt, das es verwendet: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Es kann portabel mit oder ohne Kompilieren der Skripte ausgeführt werden. Das Kompilieren zur Erstellung eines einzelnen Skripts kann ebenfalls erfolgen und ist bei der Installation hilfreich.
Ich habe auch einen einfacheren Prototyp für jede konservative Partei erstellt, die eine kurze Vorstellung davon haben möchte, wie ein Implementierungsskript funktioniert: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . Es ist klein und jeder kann den Code einfach in sein Hauptskript aufnehmen, wenn er möchte, wenn sein Code mit Bash 4.0 oder neuer ausgeführt werden soll, und er wird auch nicht verwendet eval
.