प्रोग्राम कॉन्फिगरेशन को कोड से अलग रखना महत्वपूर्ण है। यह गैर-प्रोग्रामर्स को प्रोग्राम के कोड को संशोधित किए बिना कॉन्फिगरेशन बदलने में सक्षम बनाता है। कंपाइल्ड बाइनरी एक्जीक्यूटेबल्स के साथ, यह गैर-प्रोग्रामर्स के लिए असंभव होगा क्योंकि यह न केवल सोर्स फ़ाइलों तक पहुंच की आवश्यकता होती है (जो हमारे पास ओपन सोर्स प्रोग्राम्स के साथ है) बल्कि एक प्रोग्रामर का स्किल सेट भी। कुछ लोगों के पास वह है, और अधिकांश लोग सीखना नहीं चाहते।
Bash जैसे शेल भाषाओं के साथ, सोर्स कोड एक्सेस परिभाषा के अनुसार उपलब्ध है चूंकि शेल स्क्रिप्ट्स बाइनरी फॉर्मेट में कंपाइल नहीं होती हैं। उस खुलेपन के बावजूद, गैर-प्रोग्रामर्स के लिए शेल स्क्रिप्ट्स में घुसकर उन्हें बदलना विशेष रूप से अच्छा विचार नहीं है। यहां तक कि जानकार डेवलपर्स और सिसएडमिन्स भी आकस्मिक परिवर्तन कर सकते हैं जो त्रुटियों या बदतर का कारण बनते हैं।
इसलिए कॉन्फिगरेशन आइटम्स को आसानी से मेंटेन की जाने वाली टेक्स्ट फ़ाइलों में रखने से अलगाव मिलता है और गैर-प्रोग्रामर्स को कोड में अनजाने परिवर्तन करने के खतरे के बिना कॉन्फिगरेशन एलिमेंट्स को संपादित करने की अनुमति मिलती है। कई डेवलपर्स कंपाइल्ड भाषाओं में लिखे प्रोग्राम्स के लिए ऐसा करते हैं क्योंकि वे उपयोगकर्ताओं के डेवलपर होने की उम्मीद नहीं करते। उन्हीं कई कारणों से, इंटरप्रेटेड शेल भाषाओं के साथ ऐसा करना भी समझदारी है।
सामान्य तरीका
कई अन्य भाषाओं की तरह, आप एक Bash प्रोग्राम के लिए कोड लिख सकते हैं जो ASCII टेक्स्ट कॉन्फिगरेशन फ़ाइलों को पढ़ता है और पार्स करता है, वेरिएबल नाम पढ़ता है, और मान सेट करता है जैसे प्रोग्राम कोड निष्पादित होता है। उदाहरण के लिए, एक कॉन्फिगरेशन फ़ाइल इस तरह दिख सकती है:
var1=LinuxGeek46
var2=Opensource.com
प्रोग्राम उस फ़ाइल को पढ़ेगा, प्रत्येक लाइन को पार्स करेगा, और प्रत्येक वेरिएबल में मान सेट करेगा।
सोर्सिंग (Sourcing)
Bash वेरिएबल्स को पार्स करने और सेट करने के लिए एक बहुत आसान विधि का उपयोग करता है जिसे सोर्सिंग कहा जाता है। एक एक्जीक्यूटेबल शेल प्रोग्राम से एक एक्सटर्नल फ़ाइल को सोर्स करना उस फ़ाइल की सामग्री को शेल प्रोग्राम में उसकी संपूर्णता में शामिल करने की एक सरल विधि है। एक अर्थ में, यह कंपाइल्ड भाषा include स्टेटमेंट्स की तरह है जो रनटाइम पर लाइब्रेरी फ़ाइलों को शामिल करते हैं। ऐसी फ़ाइल में किसी भी प्रकार का Bash कोड शामिल हो सकता है, जिसमें वेरिएबल असाइनमेंट्स भी शामिल हैं।
हमेशा की तरह, व्याख्या करने की तुलना में प्रदर्शित करना आसान है।
सबसे पहले, एक ~/bin डायरेक्ट्री बनाएं (यदि यह पहले से मौजूद नहीं है), और इसे वर्तमान वर्किंग डायरेक्ट्री (PWD) बनाएं। Linux फाइलसिस्टम हायरार्किकल स्टैंडर्ड ~/bin को उपयोगकर्ताओं के लिए अपने एक्जीक्यूटेबल फ़ाइलों को स्टोर करने के लिए उपयुक्त स्थान के रूप में परिभाषित करता है।
इस डायरेक्ट्री में एक नई फ़ाइल बनाएं। इसे main नाम दें और इसे एक्जीक्यूटेबल बनाएं:
[dboth@david bin]$ touch main
[dboth@david bin]$ chmod +x main
[dboth@david bin]$
इस एक्जीक्यूटेबल फ़ाइल में निम्न सामग्री जोड़ें:
#!/bin/bash
Name="LinuxGeek"
echo $Name
और इस Bash प्रोग्राम को निष्पादित करें:
[dboth@david bin]$ ./main
LinuxGeek
[dboth@david bin]$
एक नई फ़ाइल बनाएं और इसे ~/bin/data कहें। इस फ़ाइल को एक्जीक्यूटेबल होने की आवश्यकता नहीं है। इसमें निम्न जानकारी जोड़ें:
# Sourced code and variables
echo "This is the sourced code from the data file."
FirstName="David"
LastName="Both"
main प्रोग्राम में तीन लाइनें जोड़ें ताकि यह इस तरह दिखे:
#!/bin/bash
Name="LinuxGeek"
echo $Name
source ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
प्रोग्राम को फिर से चलाएं:
[dboth@david bin]$ ./main
LinuxGeek
This is the sourced code from the data file.
First name: David
LastName: Both
[dboth@david bin]$
सोर्सिंग के बारे में जानने के लिए एक और वास्तव में अच्छी बात है। आप source कमांड के शॉर्टकट के रूप में एक सिंगल डॉट (.) का उपयोग कर सकते हैं। main फ़ाइल को source के स्थान पर . को प्रतिस्थापित करके बदलें:
#!/bin/bash
Name="LinuxGeek"
echo $Name
. ~/bin/data
echo "First name: $FirstName"
echo "LastName: $LastName"
और प्रोग्राम को फिर से चलाएं। परिणाम पिछले रन के समान ही होना चाहिए।
Bash शुरू करना
Bash का उपयोग करने वाला हर Linux होस्ट – जो उनमें से लगभग सभी हैं चूंकि Bash सभी डिस्ट्रीब्यूशन्स के लिए डिफ़ॉल्ट शेल है – सोर्सिंग के कुछ उत्कृष्ट, बिल्ट-इन उदाहरण शामिल करता है।
जब भी एक Bash शेल शुरू होता है, इसके एनवायरनमेंट को कॉन्फिगर किया जाना चाहिए ताकि यह उपयोग करने योग्य हो। Bash एनवायरनमेंट को कॉन्फिगर करने के लिए पांच मुख्य फ़ाइलें और एक डायरेक्ट्री उपयोग की जाती हैं। वे यहां उनके मुख्य कार्यों के साथ सूचीबद्ध हैं:
/etc/profile: सिस्टम-वाइड एनवायरनमेंट और स्टार्टअप प्रोग्राम्स/etc/bashrc: सिस्टम-वाइड फंक्शन्स और aliases/etc/profile.d/: डायरेक्ट्री जिसमें विभिन्न कमांड-लाइन टूल्स जैसेvimऔरmcऔर किसी भी कस्टम कॉन्फिगरेशन स्क्रिप्ट्स को कॉन्फिगर करने के लिए सिस्टम-वाइड स्क्रिप्ट्स होती हैं जो एक सिसएडमिन बनाता है~/.bash_profile: उपयोगकर्ता-विशिष्ट एनवायरनमेंट और स्टार्टअप प्रोग्राम्स~/.bashrc: उपयोगकर्ता-विशिष्ट aliases और फंक्शन्स~/.bash_logout: उपयोगकर्ता लॉग आउट होने पर निष्पादित करने के लिए उपयोगकर्ता-विशिष्ट कमांड्स
इन फ़ाइलों के माध्यम से निष्पादन अनुक्रम का पता लगाने की कोशिश करें और निर्धारित करें कि यह गैर-लॉगिन Bash इनिशियलाइज़ेशन बनाम लॉगिन Bash इनिशियलाइज़ेशन के लिए किस अनुक्रम का उपयोग करता है। मैंने इसे अपने Linux प्रशिक्षण श्रृंखला, Using and administering Linux: Zero to sysadmin के वॉल्यूम 1 के अध्याय 17 में किया था।
मैं आपको एक संकेत दूंगा। यह सब ~/.bashrc स्क्रिप्ट से शुरू होता है।
निष्कर्ष
इस लेख ने एक Bash प्रोग्राम में कोड और वेरिएबल असाइनमेंट्स को खींचने के लिए सोर्सिंग का पता लगाया। कॉन्फिगरेशन फ़ाइल से वेरिएबल्स को पार्स करने की यह विधि तेज़, आसान और लचीली है। यह Bash कोड को वेरिएबल असाइनमेंट्स से अलग करने की एक विधि प्रदान करता है ताकि गैर-प्रोग्रामर्स उन वेरिएबल्स के मान सेट कर सकें।