দয়া করে আমাকে বলুন কীভাবে প্যারেন্ট শেল (বাশ, শ বা কেএসএইচ) তে কোনও ফাংশন রফতানি করতে হবে যাতে ফাংশনটি প্যারেন্ট প্রসেস থেকে শুরু হওয়া সমস্ত শিশু প্রক্রিয়ার জন্য উপলব্ধ থাকে?
দয়া করে আমাকে বলুন কীভাবে প্যারেন্ট শেল (বাশ, শ বা কেএসএইচ) তে কোনও ফাংশন রফতানি করতে হবে যাতে ফাংশনটি প্যারেন্ট প্রসেস থেকে শুরু হওয়া সমস্ত শিশু প্রক্রিয়ার জন্য উপলব্ধ থাকে?
উত্তর:
export -f
বৈশিষ্ট্য ব্যাশ নির্দিষ্ট হল:
পিতামাতা
#!/bin/bash
plus1 () { echo $(($1 + 1)); }
echo $(plus1 8)
export -f plus1
./child 14 21
শিশু
#!/bin/bash
echo $(plus1 $(($1 * $2)) )
ইন sh
, কোনও ফাংশন রফতানি করা সম্ভব নয় , যেমনটি চার্লস ডাফির দ্বারা উল্লেখ করা হয়েছে ।
আপনি যদি ksh বা zsh ব্যবহার করছেন:
আপনি পরিবেশের পরিবর্তনশীল ব্যবহার করতে পারেন FPATH
, যাতে আপনি আপনার সমস্ত ফাংশন রাখতে পারেন।
যদি FPATH
ইন্টারেক্টিভ ইন্টারপ্রেটারে সেট করা থাকে এবং বর্তমান শেল এনভায়রনমেন্ট বা এর মধ্যে একটি কমান্ড বা ফাংশন না পাওয়া যায় PATH
, তবে তালিকাভুক্ত ডিরেক্টরিগুলি অনুপস্থিত কমান্ডের নাম অনুসারে একটি ফাইলের অস্তিত্ব অনুসন্ধান করবে। যদি এটির সন্ধান পাওয়া যায় তবে এটি বর্তমান শেল পরিবেশে উত্সাহিত হয় এবং এটি ফাংশনটি সংজ্ঞায়িত করার প্রত্যাশা করে।
সুতরাং, আপনি আপনার সমস্ত ফাংশন কোনও স্থানে রাখতে পারেন FPATH
এবং শিশু স্ক্রিপ্টগুলিও এটি সন্ধান করতে সক্ষম হবে।
autoload
আপনার প্রয়োজনীয় ফাংশনগুলি লোড করতে আপনি শেল স্ক্রিপ্টগুলিতে কমান্ডটি ব্যবহার করতে পারেন :
autoload fun_a fun_b
Zsh এ, autoload
কাজ করার জন্য প্রয়োজনীয় FPATH
। ইন ksh
ও তার নিকট আত্মীয়, আমি বিশ্বাস করি এটি সহজভাবে সংজ্ঞায়িত ফাংশন ঘটায় FPATH
, আপনার পাথ নিয়মিত কমান্ড ওভাররাইড করতে তারা যদি সরাসরি সংজ্ঞায়িত করবে।
কিছু বিবরণ FPATH
এবং autoload
:
যদি আপনি এর সাথে সাবসেল তৈরি করেন ( )
তবে সেগুলি সমস্ত সংজ্ঞা, পরামিতি এবং শেল ভেরিয়েবলগুলির একটি স্ন্যাপশটের উত্তরাধিকারী হবে।
আপনি যদি প্রোগ্রামগুলির মতো এগুলি চালনা করেন তবে আপনি সংজ্ঞাগুলি এতে রাখতে পারেন .bashrc
।
আপনি যদি কোনও PATH কমান্ডের জন্য মোড়ক বা প্রতিস্থাপনের জন্য কোনও বিদ্যমান স্ক্রিপ্টকে ফাঁকি দেওয়ার চেষ্টা করছেন, তবে .bashrc
মৃত্যুদন্ডের বিবরণের উপর নির্ভর করে কাজ করবে। যদি তা না হয় তবে আপনি একটি মোড়ক স্ক্রিপ্ট সম্পাদন করতে পারেন যা কেবল একটি .
বা source
একটি অন্তর্ভুক্ত ফাইল করে যা ফাংশনগুলি সংজ্ঞায়িত করে এবং তারপরে শেল স্ক্রিপ্টের পরিবর্তে কমান্ডগুলির পরিবর্তে একই কাজ করে।
মোড়ক স্ক্রিপ্টটি এর মতো দেখতে পারে:
script=$1
shift
. include.sh
. $script "$@"
ধারণাটি হ'ল প্রথম প্যারামিটারটি আসল স্ক্রিপ্টের নাম এবং বাকী প্যারামিটারগুলি অর্গস হয়, তারপরে উপরের স্ক্রিপ্টটি চালানো হয়।
declare -x -f NAME
অধিক তথ্য
- কর্মের নাম এবং সংজ্ঞাগুলিতে ক্রিয়া বা প্রদর্শনকে সীমাবদ্ধ করুন NAME এক্সপোর্ট করতে এক্স
bash
। ( ksh
'র প্রতিরূপের আয়ত্তে declare
, typeset
, একটি হয়েছে -x
বিকল্প, কিন্তু এটি শুধুমাত্র প্রযোজ্য ভেরিয়েবল না ফাংশন; জন্য Ditto zsh
)।