Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Bash प्रोग्रामिंग

source कमांड का उपयोग करके बैश में फंक्शन और वेरिएबल आसानी से आयात करें

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

आपके शेल वातावरण को प्रभावित करने के कई तरीके हैं। आप कॉन्फ़िगरेशन फाइलों में संशोधन कर सकते हैं, जैसे ~/.bashrc और ~/.profile, आप स्टार्टअप पर सेवाएं चला सकते हैं, और आप अपने स्वयं के कस्टम कमांड बना सकते हैं या अपने स्वयं के बैश फंक्शन स्क्रिप्ट कर सकते हैं।

source के साथ अपने वातावरण में जोड़ें

बैश (कुछ अन्य शेल के साथ) में एक बिल्ट-इन कमांड है जिसे source कहा जाता है। और यहीं भ्रम हो सकता है: source वही फंक्शन करता है जो कमांड . (हाँ, यह सिर्फ एक डॉट है) करता है, और यह Tcl कमांड के समान source नहीं है (जो आपकी स्क्रीन पर आ सकता है यदि आप man source टाइप करते हैं)। बिल्ट-इन source कमांड आपके PATH में बिल्कुल नहीं है। यह एक कमांड है जो बैश के हिस्से के रूप में शामिल है, और इसके बारे में अधिक जानकारी प्राप्त करने के लिए, आप help source टाइप कर सकते हैं।

. कमांड POSIX-अनुपालक है। source कमांड POSIX द्वारा परिभाषित नहीं है लेकिन . कमांड के साथ विनिमेय है।

बैश help के अनुसार, source कमांड आपके वर्तमान शेल में एक फाइल को निष्पादित करता है। खंड "आपके वर्तमान शेल में" महत्वपूर्ण है, क्योंकि इसका मतलब है कि यह एक सब-शेल लॉन्च नहीं करता है; इसलिए, जो कुछ भी आप source के साथ निष्पादित करते हैं वह आपके वर्तमान वातावरण के भीतर होता है और इसे प्रभावित करता है।

यह जांचने से पहले कि source आपके वातावरण को कैसे प्रभावित कर सकता है, एक टेस्ट फाइल पर source आज़माएं ताकि यह सुनिश्चित हो सके कि यह अपेक्षा के अनुरूप कोड निष्पादित करता है। सबसे पहले, एक सरल बैश स्क्रिप्ट बनाएं और इसे hello.sh नामक फाइल के रूप में सहेजें:

#!/usr/bin/env bash
echo "hello world"

source का उपयोग करके, आप इस स्क्रिप्ट को एक्जीक्यूटेबल बिट सेट किए बिना भी चला सकते हैं:

$ source hello.sh
hello world

आप उसी परिणाम के लिए बिल्ट-इन . कमांड का भी उपयोग कर सकते हैं:

$ . hello.sh
hello world

source और . कमांड टेस्ट फाइल की सामग्री को सफलतापूर्वक निष्पादित करते हैं।

वेरिएबल सेट करें और फंक्शन आयात करें

आप source का उपयोग एक फाइल को अपने शेल वातावरण में "आयात" करने के लिए कर सकते हैं, ठीक वैसे ही जैसे आप C या C++ में लाइब्रेरी को संदर्भित करने के लिए include कीवर्ड का उपयोग कर सकते हैं या पायथन में मॉड्यूल लाने के लिए import कीवर्ड का उपयोग कर सकते हैं। यह source के सबसे आम उपयोगों में से एक है, और यह .bashrc फाइलों में एक सामान्य डिफ़ॉल्ट समावेश है ताकि .bash_aliases नामक फाइल को source किया जा सके ताकि आपके द्वारा परिभाषित कोई भी कस्टम aliases जब आप लॉग इन करें तो आपके वातावरण में आयात हो जाएं।

बैश फंक्शन आयात करने का एक उदाहरण यहाँ है। सबसे पहले, myfunctions नामक फाइल में एक फंक्शन बनाएं। यह आपका पब्लिक IP पता और आपका लोकल IP पता प्रिंट करता है:

function myip() {
curl https://icanhazip.com

ip addr | grep inet$IP | \
cut -d"/" -f 1 | \
grep -v 127\.0 | \
grep -v \:\:1 | \
awk '{$1=$1};1'
}

फंक्शन को अपने शेल में आयात करें:

$ source myfunctions

अपने नए फंक्शन का परीक्षण करें:

$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38

source के लिए खोजें

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

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

ये दोनों बैश में अच्छी सुविधा विशेषताएं हैं। यह व्यवहार आश्चर्यजनक रूप से शक्तिशाली है क्योंकि यह आपको सामान्य फंक्शन को अपने ड्राइव पर एक केंद्रीकृत स्थान पर संग्रहीत करने और फिर अपने वातावरण को एक इंटीग्रेटेड डेवलपमेंट एनवायरनमेंट (IDE) की तरह मानने की अनुमति देता है। आपको इस बात की चिंता नहीं करनी होगी कि आपके फंक्शन कहाँ संग्रहीत हैं, क्योंकि आप जानते हैं कि वे आपके स्थानीय समकक्ष /usr/include में हैं, इसलिए चाहे आप कहीं भी हों जब आप उन्हें सोर्स करते हैं, बैश उन्हें ढूंढ लेता है।

उदाहरण के लिए, आप ~/.local/include नामक एक डायरेक्टरी बना सकते हैं जो सामान्य फंक्शन के लिए स्टोरेज क्षेत्र के रूप में हो और फिर इस कोड ब्लॉक को अपनी .bashrc फाइल में डाल सकते हैं:

for i in $HOME/.local/include/*;
do source $i
done

यह ~/.local/include में कस्टम फंक्शन वाली किसी भी फाइल को आपके शेल वातावरण में "आयात" करता है।

बैश एकमात्र शेल है जो source या . कमांड का उपयोग करते समय वर्तमान डायरेक्टरी और आपके PATH दोनों को खोजता है।

ओपन सोर्स के लिए source का उपयोग करना

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

  1. टर्मिनल में स्मार्ट काम करने के लिए Bash टिप्स और ट्रिक्स टर्मिनल में स्मार्ट काम करने के लिए Bash टिप्स और ट्रिक्स

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

  1. Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण Linux Watch कमांड में मास्टरी: सिंटैक्स, विकल्प और व्यावहारिक उदाहरण

    Linux में watch कमांड एक काम करता है – एक कमांड को दोहराता है और परिणाम को बार-बार आउटपुट करता है, जिससे आप परिवर्तनों को देख सकते हैं। यहाँ इसका उपयोग कैसे करें। watch कमांड सिंटैक्स watch कमांड का सिंटैक्स इस प्रकार है: watch OPTIONS COMMAND ध्यान दें कि: OPTIONS नीचे दी गई तालिका से विकल्पों की

  1. - Bash सरणी में मास्टर करें: 15 व्यावहारिक उदाहरण और व्यापक ट्यूटोरियल

    एक सरणी एक वेरिएबल है जिसमें एक ही प्रकार के या अलग प्रकार के कई मान हो सकते हैं। सरणी के आकार की कोई अधिकतम सीमा नहीं है, और न ही किसी आवश्यकता है कि सदस्य वेरिएबल्स इंडेक्स्ड या सन्निकट रूप से असाइन किए जाएं। सरणी इंडेक्स शून्य से शुरू होता है। इस लेख में, आइए bash में 15 विभिन्न सरणी संचालन की सम