शेल स्क्रिप्ट लोडर इसके लिए मेरा समाधान है।
यह शामिल है () नाम से एक फ़ंक्शन प्रदान करता है जिसे एक स्क्रिप्ट को संदर्भित करने के लिए कई लिपियों में कई बार कहा जा सकता है लेकिन केवल एक बार स्क्रिप्ट को लोड करेगा। फ़ंक्शन पूर्ण पथ या आंशिक पथ स्वीकार कर सकता है (स्क्रिप्ट खोज पथ में खोज की जाती है)। लोड नामक एक समान फ़ंक्शन () भी प्रदान किया जाता है जो स्क्रिप्ट को बिना शर्त लोड करेगा।
यह बैश के लिए काम करता है उनमें से हर एक के लिए अनुकूलित स्क्रिप्ट के साथ , ksh , पीडी ksh और zsh के है; और अन्य शेल जो मूल रूप से ऐश , डैश , हिरलूम श आदि जैसे मूल श के साथ संगत हैं , एक सार्वभौमिक लिपि के माध्यम से जो शेल प्रदान कर सकने वाली सुविधाओं के आधार पर अपने कार्यों को स्वचालित रूप से अनुकूलित करता है।
[फाउर्डेड उदाहरण]
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
# ...
a.sh
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 .बश । यह छोटा है और कोई भी अपने मुख्य स्क्रिप्ट में कोड को शामिल कर सकता है यदि वे चाहते हैं कि उनका कोड बश 4.0 या नए के साथ चलाने का इरादा है, और यह भी उपयोग नहीं करता है eval
।