आप यहां क्या कर रहे हैं, इसमें शामिल है second.sh
और third.sh
उप-स्क्रिप्ट उसी प्रक्रिया में चल रही है, जिसे शेल प्रोग्रामिंग में "सोर्सिंग" कहा जाता है। . ./second.sh
मूल रूप second.sh
से उस बिंदु के पाठ को शामिल करने के बराबर है । exit
आदेश प्रक्रिया से बाहर निकल जाता है, यह बात है कि क्या आप मूल स्क्रिप्ट में या एक sourced लिपि में इसे कहते नहीं करता है।
सब आप क्या करना चाहते में कमांड चलाने है, तो 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
Builtin बाहर निकलता है केवल sourced स्क्रिप्ट और नहीं पूरी प्रक्रिया - उस के साथ एक और स्क्रिप्ट सहित के बीच कुछ अंतर में से एक है .
आदेश और माता पिता के स्क्रिप्ट में अपने पाठ भी शामिल है। Sourced स्क्रिप्ट केवल कॉल करते हैं 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
उनके बजाय सोर्सिंग करने का मतलब था?