जब आप किसी Linux शेल में लॉग इन करते हैं, तो आप एक विशिष्ट कार्य परिवेश को इनहेरिट करते हैं। एक पर्यावरण , एक शेल के संदर्भ में, इसका अर्थ है कि आपके लिए कुछ निश्चित चर पहले से ही निर्धारित हैं, जो सुनिश्चित करता है कि आपके आदेश उद्देश्य के अनुसार काम करें। उदाहरण के लिए, PATH पर्यावरण चर परिभाषित करता है कि आपका शेल कमांड के लिए कहां दिखता है। इसके बिना, बैश में आप जो कुछ भी करने का प्रयास करते हैं वह आदेश नहीं मिला . के साथ विफल हो जाएगा गलती। आपका परिवेश, जबकि आप अपने दैनिक कार्यों के बारे में अधिकतर अदृश्य होते हैं, अत्यंत महत्वपूर्ण है।
आपके शेल वातावरण को प्रभावित करने के कई तरीके हैं। आप कॉन्फ़िगरेशन फ़ाइलों में संशोधन कर सकते हैं, जैसे ~/.bashrc
और ~/.profile
, आप स्टार्टअप पर सेवाएं चला सकते हैं, और आप अपने स्वयं के कस्टम कमांड बना सकते हैं या अपने स्वयं के बैश फ़ंक्शन को स्क्रिप्ट कर सकते हैं।
स्रोत के साथ अपने परिवेश में जोड़ें
बैश (कुछ अन्य गोले के साथ) में एक अंतर्निहित कमांड होता है जिसे source
. कहा जाता है . और यहीं पर यह भ्रमित हो सकता है:source
.
(हाँ, यह केवल एक बिंदु है), और यह नहीं है वही source
Tcl
. के रूप में कमांड (यदि आप 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
. का उपयोग कर सकते हैं फ़ाइल को अपने शेल वातावरण में "आयात" करने के लिए, जैसे आप include
. का उपयोग कर सकते हैं लाइब्रेरी या import
. को संदर्भित करने के लिए C या C++ में कीवर्ड एक मॉड्यूल लाने के लिए पायथन में कीवर्ड। यह source
. के लिए सबसे आम उपयोगों में से एक है , और यह .bashrc
. में एक सामान्य डिफ़ॉल्ट समावेशन है फ़ाइलों को source
.bash_aliases
. नामक फ़ाइल ताकि आपके द्वारा परिभाषित कोई भी कस्टम उपनाम आपके द्वारा लॉग इन करने पर आपके परिवेश में आयात हो जाए।
बैश फ़ंक्शन आयात करने का एक उदाहरण यहां दिया गया है। सबसे पहले, myfunctions
. नामक फ़ाइल में एक फ़ंक्शन बनाएं . यह आपके सार्वजनिक आईपी पते और आपके स्थानीय आईपी पते को प्रिंट करता है:
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
. का उपयोग करते हैं बैश में, यह आपके द्वारा संदर्भित फ़ाइल के लिए आपकी वर्तमान निर्देशिका खोजता है। यह सभी शेल में नहीं होता है, इसलिए यदि आप बैश का उपयोग नहीं कर रहे हैं तो अपने दस्तावेज़ देखें।
यदि बैश फ़ाइल को निष्पादित करने के लिए नहीं ढूंढ पाता है, तो यह आपके PATH
. को खोजता है बजाय। फिर से, यह सभी शेल के लिए डिफ़ॉल्ट नहीं है, इसलिए यदि आप बैश का उपयोग नहीं कर रहे हैं तो अपने दस्तावेज़ देखें।
बैश में ये दोनों अच्छी सुविधा सुविधाएँ हैं। यह व्यवहार आश्चर्यजनक रूप से शक्तिशाली है क्योंकि यह आपको अपने ड्राइव पर एक केंद्रीकृत स्थान में सामान्य कार्यों को संग्रहीत करने की अनुमति देता है और फिर अपने पर्यावरण को एक एकीकृत विकास वातावरण (आईडीई) की तरह मानता है। आपको इस बारे में चिंता करने की ज़रूरत नहीं है कि आपके फ़ंक्शन कहाँ संग्रहीत हैं, क्योंकि आप जानते हैं कि वे आपके स्थानीय समकक्ष /usr/include
में हैं , इसलिए कोई फर्क नहीं पड़ता कि आप कहां हैं जब आप उन्हें स्रोत करते हैं, बैश उन्हें ढूंढता है।
उदाहरण के लिए, आप ~/.local/include
. नामक निर्देशिका बना सकते हैं सामान्य कार्यों के लिए एक भंडारण क्षेत्र के रूप में और फिर कोड के इस ब्लॉक को अपने .bashrc
. में डाल दें फ़ाइल:
for i in $HOME/.local/include/*;
do source $i
done
यह ~/.local/include
. में कस्टम फ़ंक्शन वाली किसी भी फ़ाइल को "आयात" करता है आपके शेल वातावरण में।
बैश एकमात्र ऐसा शेल है जो वर्तमान निर्देशिका और आपके PATH
. दोनों को खोजता है जब आप या तो source
. का उपयोग करते हैं या .
आदेश।
ओपन सोर्स के लिए स्रोत का उपयोग करना
source
का उपयोग करना या .
फ़ाइलों को निष्पादित करना आपके परिवर्तनों को मॉड्यूलर रखते हुए आपके पर्यावरण को प्रभावित करने का एक सुविधाजनक तरीका हो सकता है। अगली बार जब आप कोड के बड़े ब्लॉक को अपने .bashrc
में कॉपी और पेस्ट करने के बारे में सोच रहे हों फ़ाइल, संबंधित कार्यों या उपनामों के समूहों को समर्पित फ़ाइलों में रखने पर विचार करें, और फिर source
. का उपयोग करें उन्हें निगलना।