সহ হয় তুমি এখানে কি করছ second.shএবং third.shউপ-স্ক্রিপ্ট হিসাবে একই প্রক্রিয়া, যা শেল প্রোগ্রামিং বলা হয় "গুন" চলমান। . ./second.shমূলত second.shএটি সময়ে পাঠ্য অন্তর্ভুক্ত সমতুল্য । exitকমান্ড প্রক্রিয়া থেকে প্রস্থান, এটা ব্যাপার কিনা আপনি মূল লিপিতে বা সোর্সড লিপিতে সেটিতে কল না।
যদি আপনি যা করতে চান তার মধ্যে যদি কমান্ডগুলি চালিত হয় second.shএবং third.shএবং তাদের মূল স্ক্রিপ্ট থেকে ভেরিয়েবল এবং ফাংশনগুলি অ্যাক্সেস বা পরিবর্তন করতে হবে না, এই স্ক্রিপ্টগুলিকে শিশু প্রক্রিয়া হিসাবে কল করুন।
#! /bin/ksh
echo "prova"
./second.sh
echo "ho lanciato il secondo"
./third.sh
echo "ho lanciato il terzo"
মূল স্ক্রিপ্ট থেকে ভেরিয়েবল এবং ফাংশন অ্যাক্সেস করার জন্য আপনার যদি অন্য স্ক্রিপ্টগুলির প্রয়োজন হয় তবে সেগুলি সংশোধন না করে তবে সাবস্কেলগুলিতে এই স্ক্রিপ্টগুলিকে কল করুন। সাবশেলগুলি পৃথক প্রক্রিয়া, সুতরাং exitকেবলমাত্র সেগুলি থেকে বেরিয়ে আসে।
#! /bin/ksh
echo "prova"
(. ./second.sh)
echo "ho lanciato il secondo"
(. ./third.sh)
echo "ho lanciato il terzo"
যদি আপনাকে প্যারেন্ট স্ক্রিপ্টে second.shএবং এর third.shমধ্যে সংজ্ঞায়িত ভেরিয়েবল বা ফাংশন ব্যবহার করতে হয় তবে আপনাকে সেগুলি স্রোসিং করে রাখা দরকার।
returnবিল্টিনটি কেবল উত্সযুক্ত স্ক্রিপ্ট থেকে বেরিয়ে আসে পুরো প্রক্রিয়াটি নয় - এটি .কমান্ডের সাথে অন্য স্ক্রিপ্টকে অন্তর্ভুক্ত করা এবং মূল স্ক্রিপ্টে এর পাঠ্য সহ অন্তর্ভুক্ত কয়েকটি পার্থক্য । যদি exitউত্সযুক্ত স্ক্রিপ্টগুলি কেবলমাত্র শীর্ষ স্তরে কল করে, অভ্যন্তরীণ ক্রিয়াগুলির বিপরীতে, তবে আপনি এতে exitরূপান্তর করতে পারেন return। কোনও স্ক্রিপ্ট পরিবর্তন না করে আপনি কোনও উপাধ ব্যবহার করে এটি করতে পারেন।
#! /bin/ksh
echo "prova"
alias exit=return
. ./second.sh
echo "ho lanciato il secondo"
. ./third.sh
unalias exit
echo "ho lanciato il terzo"
যদি exitভিতরে ফাংশনগুলিও বলা হয়, তবে আমি মনে করি না যে এটি একটি জটিল নয়। একটি জটিল উপায় হ'ল একটি প্রস্থান ফাঁদ সেট করা এবং আপনার কোডটি সেখানে রাখা।
#!/bin/ksh
do_first () {
echo "prova"
trap "after_second" EXIT
. ./second.sh
after_second
}
after_second () {
echo "ho lanciato il secondo"
trap "after_third" EXIT
. ./third.sh
after_third
}
after_third () {
trap - EXIT
echo "ho lanciato il terzo"
}
do_first
.কমান্ডটি ব্যবহার করছেন যা বর্তমান শেলটিতে অন্য একটি ফাইল উত্স করে। এতে কোনও শিশু শেল বা সাবস্কেল জড়িত নেই। আপনি চাওয়ার কথা বলছেন কি চালানোsecond.shএবংthird.shতাদের গুন পরিবর্তে?