Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> बाश प्रोग्रामिंग

Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

इस लेख का मुख्य फोकस स्पष्ट रूप से यह समझना है कि जब आप स्क्रिप्ट बनाम स्रोत चलाते हैं तो क्या होता है बैश में स्क्रिप्ट। सबसे पहले, हम स्पष्ट रूप से समझेंगे कि जब आप स्क्रिप्ट को अलग-अलग तरीकों से कॉल करते हैं तो प्रोग्राम कैसे सबमिट किया जाता है।

नोट :एक्सटेंशन के साथ स्क्रिप्ट बनाना कोई मायने नहीं रखता। बिना एक्सटेंशन के भी स्क्रिप्ट ठीक चलेगी।

मूल रूप से, प्रत्येक स्क्रिप्ट एक लाइन से शुरू होती है जिसे शेबंग(#!) . कहा जाता है . हैश बैश में प्रतीक की व्याख्या टिप्पणियों के रूप में की जाएगी लेकिन शेबैंग विशेष अर्थ रखता है। यह बैश को शेबांग . में आपके द्वारा उल्लिखित किसी भी दुभाषिया में प्रोग्राम सबमिट करने के लिए कहता है ।

नीचे एक नमूना कार्यक्रम है और मैं अपने दुभाषिया के रूप में बैश निर्दिष्ट कर रहा हूं।

$ cat >> Hello_World.sh
#!/usr/bin/env bash
echo "Hello world"

$ chmod +x Hello_world.sh

अब स्क्रिप्ट चलाने के लिए, आप इसे दो तरह से कर सकते हैं।

  • स्क्रिप्ट को कॉल करने के लिए एक सापेक्ष पथ का उपयोग करें। उस निर्देशिका में जाएँ जहाँ स्क्रिप्ट मौजूद है और ./Hello_world.sh run चलाएं ।
  • स्क्रिप्ट को कॉल करने के लिए पूर्ण पथ का उपयोग करें। फ़ाइल सिस्टम में कहीं से भी स्क्रिप्ट का पूरा पथ टाइप करें।
$ ./Hello_world.sh
$ pwd
$ /home/karthick/Hello_world
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

अब देखते हैं कि जब आप शेबैंग . के बिना अपना प्रोग्राम सबमिट करने का प्रयास करते हैं तो क्या होता है . शेबांग . की अनुपस्थिति में , आप जिस भी मौजूदा शेल के साथ चल रहे हैं, प्रोग्राम को सबमिट किया जाएगा, मेरे मामले में, यह बैश है (/bin/bash )।

मैं एक उदाहरण प्रदर्शित करता हूं। मैं शेबैंग . के बिना एक अजगर स्क्रिप्ट बना रहा हूं और जब मैं प्रोग्राम को कॉल करता हूं, बैश यह नहीं जानता कि इसे इस प्रोग्राम को पायथन इंटरप्रेटर को सबमिट करना चाहिए, इसके बजाय यह प्रोग्राम को वर्तमान शेल में चलाएगा।

$ cat > run-py.py
echo $SHELL
print("Hello world")

$ chmod +x run-py.py
$ ./run-py.py
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

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

# which python3
$(which python3) /home/karthick/run_py.py
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

अब जब आप जानते हैं कि स्क्रिप्ट को कैसे कॉल किया जाता है, तो अगला कदम यह समझना होगा कि जब हम स्क्रिप्ट को कॉल करते हैं तो क्या होता है। जब आप उपरोक्त उदाहरणों में दिखाए गए अनुसार स्क्रिप्ट का आह्वान करते हैं तो यह एक चाइल्ड प्रोसेस (forking .) बनाएगी ) और स्क्रिप्ट को चाइल्ड प्रोसेस में सबमिट कर दिया जाएगा। मैंने एक नमूना स्क्रिप्ट चलाई जो केवल निम्न आदेश चलाएगी और दिखाती है कि स्क्रिप्ट एक बच्चे की प्रक्रिया में सबमिट की गई है।

$ ps -ef --forest | grep -i bash
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

स्क्रिप्ट के एक भाग के रूप में कई चाइल्ड प्रोसेस हो सकते हैं और यह हमारे कोड पर निर्भर करता है। यह ध्यान दिया जाना चाहिए कि सबस्क्रिप्ट द्वारा बनाए गए पर्यावरण चर समाप्त होने के बाद छोड़ दिए जाएंगे। चाइल्ड प्रोसेस पैरेंट प्रोसेस द्वारा बनाए गए वेरिएबल को एक्सपोर्ट करके एक्सेस कर सकता है। लेकिन पैरेंट प्रोसेस चाइल्ड प्रोसेस द्वारा बनाए गए वेरिएबल्स को एक्सेस नहीं कर सकता है।

वेरिएबल कैसे काम करते हैं और वेरिएबल कैसे एक्सपोर्ट करते हैं, इस बारे में अधिक समझने के लिए नीचे दिए गए लेखों पर एक नज़र डालें।

  • शैल स्क्रिप्टिंग में 'लिनक्स वैरिएबल' को समझना और लिखना
  • बैश में $$ और $BASHPID के बीच अंतर जानें

स्क्रिप्ट की सोर्सिंग

स्रोत "एक शेल बिल्ट-इन कमांड है जो पास की गई फाइल को एक तर्क के रूप में पढ़ता है और वर्तमान शेल वातावरण में कोड चलाता है। एक उपयुक्त उपयोग मामला जिसका आप अधिकतर उपयोग करते हैं वह है .bashrc . में अपने कॉन्फ़िगरेशन को संशोधित करना या .bash_profile और स्रोत आदेश . का उपयोग करके परिवर्तनों को पुनः लोड करना ।

$ type -a source
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

स्रोत आदेश . को चलाने के दो वाक्यात्मक तरीके हैं . आप दो सिंटैक्स में से किसी को भी चुन सकते हैं और यह व्यक्तिगत पसंद का है।

$ source FILE_NAME [ARGUMENTS]
$ . FILE_NAME [ARGUMENTS]

मुझे यह दिखाने दें कि स्रोत वास्तव में कैसे काम करता है। मैं दो शेल स्क्रिप्ट बनाने जा रहा हूं। पहली स्क्रिप्ट (Module.sh ) कुछ चर और कार्यों को रखने जा रहा है। दूसरी स्क्रिप्ट (Main.sh ) वेरिएबल को प्रिंट करने और फंक्शन को कॉल करने जा रहा है।

फ़ाइल Module.sh

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo “Function f1 is called”
}

फ़ाइल Main.sh

#!/usr/bin/env bash

echo $VAR1
f1
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

स्क्रिप्ट के लिए निष्पादन अनुमति सेट करें और मुख्य स्क्रिप्ट को कॉल करें “main.sh” . अब, यह स्क्रिप्ट फ़ंक्शन f1 . को खोजने का प्रयास करेगी और चर VAR1 वर्तमान शेल वातावरण में और कमांड नहीं मिलने से विफल हो जाएगा।

$ bash main.sh
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

अब स्क्रिप्ट के अंदर स्रोत कमांड चलाते हैं जो चर और कार्यों को वर्तमान शेल वातावरण में लोड करेगा और जो कि “main.sh” द्वारा सुलभ होगा। ।

फ़ाइल Module.sh

#!/usr/bin/env bash

VAR1=$(echo "Welcome to $1")

function f1(){
  echo “Function f1 is called”
}

फ़ाइल Main.sh

#!/usr/bin/env bash

source module.sh Tecmint
echo $VAR1
f1
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

अब स्क्रिप्ट को फिर से चलाएँ और देखें।

$ bash main.sh
Bash . में सोर्सिंग और फोर्किंग के बीच अंतर जानें

स्रोत बैश . में बहुत उपयोगी है हमारी शेल स्क्रिप्ट बनाने में मॉड्यूलर प्रोग्रामिंग दृष्टिकोण का पालन करने के लिए। हम अपने कोड को छोटे मॉड्यूल में तोड़ सकते हैं और कई कार्यक्रमों में इस्तेमाल किया जा सकता है। इन तरीकों से, हम DRY . का अनुसरण कर सकते हैं (खुद को न दोहराएं ) सिद्धांत।

इस लेख के लिए बस इतना ही। हमने बैश में सोर्सिंग और फोर्किंग के बीच के अंतर पर संक्षेप में चर्चा की है। लेख को पढ़ें और अपनी बहुमूल्य प्रतिक्रिया हमारे साथ साझा करें।


  1. सी और सी ++ के बीच अंतर।

    जैसा कि हम जानते हैं कि C और C++ दोनों ही प्रोग्रामिंग लैंग्वेज हैं और इनका इस्तेमाल एप्लीकेशन डेवलपमेंट के लिए किया जाता है। इन दोनों भाषाओं के बीच मुख्य अंतर यह है कि C एक प्रक्रियात्मक प्रोग्रामिंग भाषा है और यह कक्षाओं और वस्तुओं का समर्थन नहीं करती है, जबकि C++ प्रक्रियात्मक और वस्तु-उन्मुख प्र

  1. गो और जावा के बीच अंतर.

    जाओ गो एक प्रक्रियात्मक प्रोग्रामिंग भाषा है। पैकेज का उपयोग करके कार्यक्रमों को इकट्ठा किया जाता है। यह गतिशील भाषाओं के समान पर्यावरण अपनाने वाले पैटर्न का समर्थन करता है। जावा जावा एक ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग लैंग्वेज है। जावा शांत तेज, विश्वसनीय और सुरक्षित है। यह सबसे व्यापक रूप से उपयो

  1. बश में $$ और $BASHPID के बीच अंतर जानें

    हाल ही में मैं एक शेल स्क्रिप्ट पर काम कर रहा था और मैंने एक महत्वपूर्ण अंतर देखा कि कैसे विशेष चर $ . को बैश किया जाता है और BASHPID व्यवहार करता है। Linux में चलने वाली प्रत्येक प्रक्रिया को एक प्रक्रिया ID . के साथ असाइन किया जाएगा और इसी तरह से ऑपरेटिंग सिस्टम प्रक्रिया को संभालता है। संबंधित पढ