Shell Script Loader adalah solusi saya untuk ini.
Ini menyediakan fungsi bernama include () yang dapat dipanggil berkali-kali dalam banyak skrip untuk merujuk skrip tunggal tetapi hanya akan memuat skrip sekali. Fungsi dapat menerima jalur lengkap atau jalur sebagian (skrip dicari dalam jalur pencarian). Fungsi serupa bernama load () juga disediakan yang akan memuat skrip tanpa syarat.
Ini berfungsi untuk bash , ksh , pd ksh dan zsh dengan skrip yang dioptimalkan untuk masing-masingnya; dan cangkang lain yang secara umum kompatibel dengan sh asli seperti abu , tanda hubung , pusaka sh , dll., melalui skrip universal yang secara otomatis mengoptimalkan fungsinya tergantung pada fitur yang disediakan cangkang.
[Fowarded example]
start.sh
Ini adalah skrip starter opsional. Menempatkan metode startup di sini hanya kenyamanan dan dapat ditempatkan di skrip utama sebagai gantinya. Skrip ini juga tidak diperlukan jika skrip ingin dikompilasi.
#!/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
# ...
Abu
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 ----'
keluaran:
---- b.sh ----
---- a.sh ----
---- main.sh ----
Yang terbaik adalah skrip berdasarkan itu juga dapat dikompilasi untuk membentuk satu skrip dengan kompiler yang tersedia.
Berikut adalah proyek yang menggunakannya: http://sourceforge.net/p/playshell/code/ci/master/tree/ . Itu dapat berjalan dengan mudah dengan atau tanpa mengkompilasi skrip. Kompilasi untuk menghasilkan satu skrip juga dapat terjadi, dan sangat membantu selama instalasi.
Saya juga membuat prototipe sederhana untuk pihak konservatif yang mungkin ingin memiliki gagasan singkat tentang cara kerja script implementasi: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash . Ini kecil dan siapa saja bisa memasukkan kode dalam skrip utama mereka jika mereka mau jika kode mereka dimaksudkan untuk dijalankan dengan Bash 4.0 atau lebih baru, dan itu juga tidak digunakan eval.