शेल स्क्रिप्ट के भीतर से कमांड कैसे निष्पादित करें

How Execute Commands From Within Shell Script



बैश में, शेल स्क्रिप्ट से कमांड निष्पादित करना पहली बार में थोड़ा डराने वाला हो सकता है और इसके लिए विश्वास की छलांग की आवश्यकता हो सकती है। आखिरकार, बैश स्क्रिप्ट के भीतर निष्पादित कमांड इंटरैक्टिव नहीं होते हैं। यहां हम कमांड के बारे में निम्नलिखित प्रश्नों का उत्तर देते हुए शेल स्क्रिप्ट के भीतर से कमांड निष्पादित करने के लिए नींव रखेंगे: वे कहां से आते हैं? वे क्या हैं? हम उन्हें एक स्क्रिप्ट में कैसे उपयोग करते हैं?

आदेश कहाँ से आते हैं?

बैश में कमांड निम्न में से किसी भी श्रेणी से आते हैं:







बैश ही (बिल्डिन देखें)

बैश अपनी अंतर्निहित सुविधाओं तक पहुंच की अनुमति देने के लिए कमांड के अपने सेट के साथ आता है जैसे कि एरेज़ घोषित करना, फ़ाइल से लाइनों को पढ़ना, और अन्य सुविधाओं को बैश में बनाया गया है। हम इस श्रेणी के कमांड्स को कॉल करते हैं, बैश बिल्टिन कमांड्स, या बिल्टिन्स शॉर्ट के लिए।



आपके वातावरण में निष्पादन योग्य (बाहरी आदेश देखें)

डिफ़ॉल्ट रूप से, बैश डिफ़ॉल्ट रूप से कुछ चरों को इनहेरिट करेगा। यह PATH वैरिएबल के मामले में देखा जाता है जिसमें निष्पादन योग्य स्थानों के लिए स्थान शामिल हैं जिन्हें बैश में बाहरी कमांड के रूप में संदर्भित किया जाता है। अर्थात्, यदि कर्ल कमांड आपके रास्ते में है, इसे बैश स्क्रिप्ट के भीतर से उसी तरह निष्पादित किया जा सकता है जैसे इंटरेक्टिव मोड में। हम इस श्रेणी के आदेश, बाहरी आदेश, या संक्षिप्त के लिए आदेश कहते हैं।



उपयोगकर्ता-परिभाषित फ़ंक्शन (फ़ंक्शन देखें)

बाहरी कमांड और बिल्टिन को निष्पादित करने से पहले, बैश जांचता है कि कोई फ़ंक्शन परिभाषित किया गया है या नहीं। यदि यह फ़ंक्शन है तो कमांड के रूप में निष्पादित किया जाता है। यदि ऐसा नहीं होता है, तो यह आदेशों के लिए वरीयता के क्रम को आगे बढ़ाता है। किसी स्क्रिप्ट के बाहर परिभाषित फ़ंक्शन को निष्पादित करने के लिए, उन्हें -x विशेषता के साथ घोषित किया जाना चाहिए; अन्यथा, उन्हें का उपयोग करके शामिल किया जा सकता है। कमान। हम इस श्रेणी के कमांड्स को यूजर-डिफ़ाइंड फंक्शन्स या फंक्शन्स को संक्षेप में कहते हैं।





आदेश क्या हैं

एक कमांड किसी भी शब्द को शेल वातावरण के भीतर किसी प्रोग्राम के प्रवेश के एकल बिंदु के रूप में माना जाता है। इस मामले में कि कमांड निष्पादित किया जाता है, कमांड स्वयं और वैकल्पिक तर्कों को स्थितीय मापदंडों के रूप में पारित किया जाता है, ${0}, ${1}, ${2}, … शून्य स्थितित्मक पैरामीटर (${0}) निर्दिष्ट करता है आदेश स्वयं और संदर्भ में अपरिवर्तित है। अर्थात्, फ़ंक्शन में स्थितीय मापदंडों के विपरीत, ${1}, ${2}, ... जो संदर्भ के आधार पर बदल सकता है, ${0} फ़ंक्शन कॉल के बीच अपरिवर्तित रहता है।

घोषणाओं के स्थान और वैश्विक, बिल्ट-इन बैश, या आपके बैश प्रोग्राम के लिए स्थानीय के रूप में निर्दिष्ट विशेषताओं के आधार पर कमांड को स्कोप किया जाता है।



जानने के लिए यहां कमांड प्रकारों की एक सूची दी गई है।

अंतर्निहित आदेश

ये बैश ब्रह्मांड के प्रथम श्रेणी के नागरिक हैं, जिनमें '.' ':' '[' ']' जैसे वर्ण और आरक्षित शब्द जैसे डिक्लेयर इन बैश शामिल हैं। आप अपनी बैश स्क्रिप्ट में उपयोग के लिए उपलब्ध होने के लिए, बैश बिल्टिन कमांड की सूची में निहित इन आदेशों पर भरोसा करते हैं।

आपके बैश दुभाषिया के पदनाम और संस्करण संख्या के आधार पर कुछ कमांड उपलब्ध नहीं हो सकते हैं।

बाहरी आदेश

बाहरी कमांड कर्ल जैसे बैश स्क्रिप्ट के बाहर पहुंच योग्य निष्पादन योग्य हैं। फ़ंक्शंस के विपरीत, बाहरी कमांड को चर के रूप में संग्रहीत नहीं किया जाता है।

कमांड प्रकार की प्राथमिकता जितनी कम होगी, बाद में कमांड की व्याख्या की जा सकती है। बाहरी कमांड में बैश में वरीयता का निम्नतम क्रम होता है। बाहरी कमांड चलाने से पहले, दुभाषिया बैश, फ़ंक्शंस की तलाश करेगा, फिर बिलिन्स, और अंत में यह देखने का प्रयास करेगा कि कोई कमांड बाहरी रूप से मौजूद है या नहीं। यदि नहीं, तो आपको निम्न त्रुटि देखनी चाहिए।

बैश: अज्ञात-आदेश:आदेशपता नहीं चला

बैश स्क्रिप्ट में, फ़ंक्शन बाहरी कमांड व्यवहार को ओवरराइड कर सकते हैं यदि समान नाम साझा करते हैं जैसे कि हमने पहले कर्ल बैश उदाहरणों में देखा है। फ़ंक्शन का उपयोग करके कस्टम बाहरी कमांड का एक उदाहरण निम्नानुसार है।

कर्ल() {
आदेश ${FUNCNAME}...
}

यह काम करता है क्योंकि फ़ंक्शंस में बाहरी कमांड और यहां तक ​​​​कि बैश बिलिन्स की तुलना में अधिक प्राथमिकता होती है। सीमा फ़ंक्शन नाम में अनुमत वर्ण है।

ध्यान दें कि उपरोक्त उदाहरण निम्न प्रकार से उपनाम का उपयोग करके पूरा किया जा सकता है।

उपनाम कर्ल= '
{
कर्ल ...
}
'

उपनामों के मामले में, निष्पादन में संदर्भ के आधार पर कमांड का प्रकार भिन्न हो सकता है, जबकि फ़ंक्शन विधि का उपयोग करने वाले कस्टम बाहरी कमांड के मामले में, प्रवेश बिंदु हमेशा एक फ़ंक्शन होता है।

कार्यों

बैश में कार्य नियम। बिल्टिन और बाहरी कमांड को देखने से पहले, बैश जांचता है कि उम्मीदवार फ़ंक्शन नाम से परिभाषित फ़ंक्शन, लाइन पर या उसके बाद पहला शब्द दिखाई देता है; एक कमांड लाइन के अंत को निर्दिष्ट करने वाला वर्ण। एकमात्र अपवाद ${FUNCNAME} जैसे सभी-कैप्स में लिखे गए बैश चर हैं।

उपनाम() { फंकनाम=एएसडीएफ;फेंक दिया $ {@ ,,};}
उपनाम कर्ल='टेस्ट कर्ल उपनाम' #?

सरल आदेश

साधारण कमांड को बैश मैन पेज में एक शब्द के रूप में परिभाषित किया गया है जिसके बाद वैकल्पिक तर्क दिए गए हैं। संदर्भ में, एक साधारण कमांड या तो एक बिल्टिन, बाहरी कमांड या फ़ंक्शन हो सकता है।

बैश स्क्रिप्ट के भीतर से कमांड कैसे निष्पादित करें

अब जब हम जानते हैं कि किस प्रकार के आदेश उपलब्ध हैं, तो हम विस्तार कर सकते हैं कि उन्हें आपकी स्क्रिप्ट में कैसे उपयोग किया जाए। सबसे पहले, हमें यह जानना होगा कि बैश में कमांड वरीयता कैसे काम करती है।

बैश स्क्रिप्ट में वरीयता को नियंत्रित करने के कुछ तरीके यहां दिए गए हैं।

बैश को तय करने दें

कमांड_नाम

अधिकांश भाग के लिए, विशेष रूप से शुरुआत में, हम बस बैश को यह तय करने देते हैं कि किस कमांड का उपयोग करना है। हालाँकि, ऐसे मामले हैं जब आपके इरादे की सही व्याख्या बैश द्वारा नहीं की जा सकती है। ऐसा तब होता है जब फ़ंक्शन नाम और बाहरी आदेश या बिल्टिन ओवरलैप होते हैं।

बाहरी कमांड निष्पादित करें

आदेशकमांड_नाम

मान लीजिए कि एक बाहरी कमांड कमांड_नाम है जो इंटरेक्टिव मोड में उपलब्ध है और आप इसे बैश स्क्रिप्ट में उपयोग करना चाहते हैं। हम स्पष्ट रूप से बैश को बता सकते हैं कि कमांड_नाम बिल्टिन कमांड का उपयोग करके एक बाहरी कमांड है।

बाहरी कमांड उदाहरण

निम्नलिखित मानकर बाहरी कमांड उदाहरण स्थापित हैं:

फ़ाइल
जाओ
अंजीर
उदाहरण: फ़ाइल प्रकार और जानकारी प्राप्त करें
{ # फ़ाइल प्रकार और जानकारी प्राप्त करें
फ़ाइल ${इनफाइल} # (1,2)
}
# (1) कमांड, फाइल
# (2) infile = {फ़ाइल का पथ}
उदाहरण: चरण संशोधित और git . में नई फ़ाइलें
{ # चरण फ़ाइलें git . में
गिट जोड़ें.#(1)
}
# (१) कमांड, git
उदाहरण: अंजीर का उपयोग करके एएससीआई कला बनाएं
{ # असीसी कला बनाएं
अंजीर${संदेश} # (1,2)
}
# (1) कमांड, अंजीर
# (2) संदेश = {एसीआई कला के रूप में प्रदर्शित करने के लिए संदेश}

एक बिल्टिन कमांड निष्पादित करें

अंतर्निहितकमांड_नाम

मान लीजिए कि कमांड_नाम बैश में बिल्टिन के रूप में परिभाषित कमांड में से एक है। बैश को यह बताने के लिए कि हम कमांड_नाम को एक बिल्टिन के रूप में चलाना चाहते हैं, हम बिल्टिन बिल्टिन का उपयोग करते हैं।

अंतर्निहित कमांड उदाहरण
उदाहरण: कितने बिल्टिन?
अंतर्निहित{,}{,,}{,,,} #कितने बिलिन?
उदाहरण: प्रेत घोषणा
{
घोषित() { फेंक दियाउफ़!;}
घोषित-एक्सएफघोषित #?
}

निष्कर्ष

बैश शेल स्क्रिप्ट के भीतर से कमांड को निष्पादित करना काफी आसान है। तीन मुख्य कमांड प्रकार हैं। बैश में सरल कमांड की व्याख्या कैसे की जाती है, यह जानने से रनटाइम में किस प्रकार के कमांड को निष्पादित किया जाता है, इस पर बेहतर नियंत्रण हो सकता है।