Shell Script Loader bunun için benim çözümüm.
Tek bir komut dosyasına başvurmak için birçok komut dosyasında birçok kez çağrılabilen, ancak komut dosyasını yalnızca bir kez yükleyecek, include () adında bir işlev sağlar. İşlev, tam yolları veya kısmi yolları kabul edebilir (komut dosyası bir arama yolunda aranır). Scriptleri koşulsuz olarak yükleyecek load () adında benzer bir işlev de sağlanmıştır.
Şunun için çalışır bash , ksh , pd Ksh ve zsh ile bunların her biri için optimize edilmiş komut; ve kül , çizgi , yadigarı sh , vb. gibi orijinal sh ile genel olarak uyumlu diğer kabuklar , kabuğun sağlayabildiği özelliklere bağlı olarak işlevlerini otomatik olarak optimize eden evrensel bir komut dosyası aracılığıyla.
[Örnek alınan]
start.sh
Bu isteğe bağlı bir başlangıç betiğidir. Başlatma yöntemlerini buraya yerleştirmek sadece bir kolaylıktır ve bunun yerine ana komut dosyasına yerleştirilebilir. Komut dosyaları derlenecekse bu komut dosyasına da gerek yoktur.
#!/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
# ...
kül
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 ----'
çıktı:
---- b.sh ----
---- a.sh ----
---- main.sh ----
En iyisi, buna dayalı betikler de mevcut derleyici ile tek bir betik oluşturmak için derlenebilir.
İşte onu kullanan bir proje: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Komut dosyalarını derleyerek veya derlemeden taşınabilir bir şekilde çalışabilir. Tek bir komut dosyası oluşturmak için derleme de olabilir ve yükleme sırasında yardımcı olur.
Ayrıca, bir uygulama komut dosyasının nasıl çalıştığı hakkında kısa bir fikir sahibi olmak isteyen herhangi bir muhafazakar parti için daha basit bir prototip oluşturdum: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . Küçüktür ve kodunun Bash 4.0 veya daha yeni bir sürümle çalıştırılması isteniyorsa herkes kodunu ana komut dosyasına ekleyebilir ve kullanmaz eval
.