Shell Script Loaderเป็นทางออกของฉันในเรื่องนี้
มันมีฟังก์ชั่นชื่อรวม () ที่สามารถเรียกได้หลายครั้งในหลาย ๆ สคริปต์เพื่ออ้างถึงสคริปต์เดียว แต่จะโหลดสคริปต์เพียงครั้งเดียว ฟังก์ชันสามารถยอมรับเส้นทางที่สมบูรณ์หรือเส้นทางบางส่วน (สคริปต์ถูกค้นหาในเส้นทางการค้นหา) นอกจากนี้ยังมีฟังก์ชั่นที่คล้ายกันชื่อว่า load () ที่จะโหลดสคริปต์โดยไม่มีเงื่อนไข
มันใช้งานได้กับbash , ksh , pd kshและzsh พร้อมกับสคริปต์ที่เหมาะสมที่สุดสำหรับแต่ละอัน และเชลล์อื่น ๆ ที่เข้ากันได้กับ sh ดั้งเดิมเช่นash , dash , heirloom 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/ http://sourceforge.net/p/playshell/code/ci/master/tree/มันสามารถรันได้แบบพกพาโดยมีหรือไม่มีการรวบรวมสคริปต์ การคอมไพล์เพื่อสร้างสคริปต์เดียวสามารถเกิดขึ้นได้และมีประโยชน์ในระหว่างการติดตั้ง
ฉันยังสร้างต้นแบบที่เรียบง่ายขึ้นสำหรับกลุ่มอนุรักษ์นิยมที่อาจต้องการทราบข้อมูลสั้น ๆ เกี่ยวกับวิธีการใช้งานสคริปต์: https://sourceforge.net/p/loader/code/ci/base/tree/loader-include-prototype .bash มันมีขนาดเล็กและทุกคนก็สามารถรวมรหัสในสคริปต์หลักของพวกเขาหากพวกเขาต้องการที่จะถ้ารหัสของพวกเขามีจุดมุ่งหมายในการทำงานด้วยทุบตี 4.0 eval
หรือใหม่กว่าและยังไม่ได้ใช้