シェルスクリプトローダーは、これに対する私のソリューションです。
これは、単一のスクリプトを参照するために多くのスクリプトで何度も呼び出すことができるinclude()という名前の関数を提供しますが、スクリプトは1回しかロードしません。関数は、完全なパスまたは部分的なパスを受け入れることができます(スクリプトは検索パスで検索されます)。無条件にスクリプトをロードするload()という名前の同様の関数も提供されています。
それはのために働くのbash、kshの、PDのkshとzshのとそれらのそれぞれのために最適化されたスクリプト。シェルが提供できる機能に応じて機能を自動的に最適化するユニバーサルスクリプトを通じて、ash、dash、heirloom shなどの元の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 ----'
b.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。それは小さく、コードがBash 4.0以降で実行することを意図していて、それを使用しない場合は、メインスクリプトにコードを含めることができますeval
。