শেল স্ক্রিপ্ট লোডার এটির জন্য আমার সমাধান।
এটি অন্তর্ভুক্ত () নামের একটি ফাংশন সরবরাহ করে যা একটি স্ক্রিপ্ট উল্লেখ করার জন্য অনেক স্ক্রিপ্টে বহুবার কল করা যেতে পারে তবে কেবল একবার স্ক্রিপ্টটি লোড করবে। ফাংশনটি সম্পূর্ণ পাথ বা আংশিক পাথ গ্রহণ করতে পারে (স্ক্রিপ্ট কোনও অনুসন্ধানের পথে সন্ধান করা হয়)। লোড () নামে একটি অনুরূপ ফাংশনও সরবরাহ করা হয়েছে যা স্ক্রিপ্টগুলি নিঃশর্ত লোড করবে।
এটি bash , ksh , pd ksh এবং zsh এর জন্য প্রতিটিগুলির জন্য অনুকূলিত স্ক্রিপ্টগুলির সাথে কাজ করে; এবং অন্যান্য শেলগুলি যে সর্বজনীন স্ক্রিপ্টের মাধ্যমে মূল শের মতো ছাই , ড্যাশ , উত্তরাধিকারী শ , ইত্যাদি ইত্যাদির সাথে সাধারণভাবে সুসংগত হয় যা শেল সরবরাহ করতে পারে তার বৈশিষ্ট্যগুলির উপর নির্ভর করে স্বয়ংক্রিয়ভাবে তার ক্রিয়াকে অনুকূল করে দেয়।
[প্রিয় উদাহরণ]
start.sh
এটি একটি alচ্ছিক স্টার্টার স্ক্রিপ্ট। এখানে স্টার্টআপ পদ্ধতিগুলি স্থাপন করা কেবল একটি সুবিধা এবং পরিবর্তে মূল স্ক্রিপ্টে রাখা যেতে পারে। স্ক্রিপ্টগুলি সংকলন করতে হলে এই স্ক্রিপ্টটিরও প্রয়োজন নেই।
#!/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-incolve-prototype .বাশ । এটি ছোট এবং যে কেউ তাদের কোডটি বাশ ৪.০ বা আরও নতুন দিয়ে চালানোর উদ্দেশ্যে তৈরি করতে চাইলে তাদের কোডটি কেবল তাদের মূল স্ক্রিপ্টে অন্তর্ভুক্ত করতে পারে এবং এটি ব্যবহারও করে না eval
।