direnv आपके शेल के लिए एक उपयोगी ओपन-सोर्स एक्सटेंशन है जो लिनक्स और macOS जैसे UNIX ऑपरेटिंग सिस्टम पर काम करता है। यह एकल स्टैटिक एक्जीक्यूटेबल के रूप में कंपाइल होता है और bash, zsh, tcsh, और fish जैसे शेल्स को सपोर्ट करता है।
direnv का मुख्य उद्देश्य
direnv का मुख्य उद्देश्य ~/.profile या संबंधित शेल स्टार्टअप फ़ाइलों को अव्यवस्थित किए बिना परियोजना-विशिष्ट पर्यावरण चर की अनुमति देना है। यह वर्तमान डायरेक्टरी के आधार पर पर्यावरण चर को लोड और अनलोड करने का एक नया तरीका लागू करता है।
इसका उपयोग 12factor ऐप्स (सॉफ्टवेयर-एज-ए-सर्विस ऐप्स बनाने की एक पद्धति) के पर्यावरण चर लोड करने, प्रति-परियोजना अलग विकास वातावरण बनाने, और डिप्लॉयमेंट के लिए सीक्रेट्स लोड करने के लिए किया जाता है। इसके अलावा, इसका उपयोग rbenv, pyenv, और phpenv के समान मल्टी-वर्जन इंस्टॉलेशन और प्रबंधन समाधान बनाने के लिए भी किया जा सकता है।
direnv कैसे काम करता है?
शेल द्वारा कमांड प्रॉम्प्ट लोड करने से पहले, direnv वर्तमान डायरेक्टरी (जिसे pwd कमांड से प्रदर्शित किया जा सकता है) और पैरेंट डायरेक्टरी में .envrc फ़ाइल के अस्तित्व की जांच करता है। यह जांच प्रक्रिया तेज़ है और प्रत्येक प्रॉम्प्ट पर ध्यान देने योग्य नहीं होती।
एक बार जब यह उपयुक्त अनुमतियों के साथ .envrc फ़ाइल ढूंढ लेता है, तो यह इसे एक bash सब-शेल में लोड करता है और सभी निर्यात किए गए चर को कैप्चर करके उन्हें वर्तमान शेल के लिए उपलब्ध कराता है।
Linux सिस्टम में direnv इंस्टॉल करना
अधिकांश Linux डिस्ट्रीब्यूशन में, direnv पैकेज डिफ़ॉल्ट रिपॉजिटरी से आपके सिस्टम पैकेज मैनेजर का उपयोग करके इंस्टॉल करने के लिए उपलब्ध होता है:
$ sudo apt install direnv # Debian, Ubuntu और Mint $ sudo dnf install direnv # Fedora
Red Hat Enterprise Linux (RHEL) और CentOS जैसे अन्य डिस्ट्रीब्यूशन पर या किसी भी डिस्ट्रीब्यूशन जो स्नैप्स सपोर्ट करता है, आप इसे snap के रूप में इंस्टॉल कर सकते हैं। इसके लिए आपके सिस्टम पर snapd इंस्टॉल होना आवश्यक है।
$ sudo snap install direnv
अपने Bash शेल में direnv को हुक करना
direnv इंस्टॉल करने के बाद, आपको इसे अपने वर्तमान Linux शेल में हुक करना होगा। उदाहरण के लिए Bash के लिए, ~/.bashrc फ़ाइल के अंत में निम्न लाइन जोड़ें:
सुनिश्चित करें कि यह rvm, git-prompt, और प्रॉम्प्ट में हेरफेर करने वाले अन्य शेल एक्सटेंशन के बाद भी दिखाई दे।
eval "$(direnv hook bash)"
ZSH शेल के लिए
~/.zshrc फ़ाइल के अंत में निम्न लाइन जोड़ें:
eval "$(direnv hook zsh)"
FISH शेल के लिए
~/.config/fish/config.fish फ़ाइल के अंत में निम्न लाइन जोड़ें:
eval (direnv hook fish)
फिर सक्रिय टर्मिनल विंडो को बंद करें और एक नया शेल खोलें या फ़ाइल को सोर्स करें:
$ source ~/.bashrc $ source ~/.zshrc $ source ~/.config/fish/config.fish
Linux शेल में direnv का उपयोग कैसे करें
direnv कैसे काम करता है यह प्रदर्शित करने के लिए, हम tecmint_projects नामक एक नई डायरेक्टरी बनाएंगे और उसमें जाएंगे:
$ mkdir ~/tecmint_projects $ cd tecmint_projects/
अब, कमांड लाइन पर TEST_VARIABLE नामक एक नया चर बनाएं और जब इसे इको किया जाए, तो मान खाली होना चाहिए:
$ echo $TEST_VARIABLE
अब हम एक नई .envrc फ़ाइल बनाएंगे जिसमें Bash कोड होगा जिसे direnv द्वारा लोड किया जाएगा। हम इको कमांड और आउटपुट रीडायरेक्शन कैरेक्टर (>) का उपयोग करके इसमें “export TEST_VARIABLE=tecmint” लाइन जोड़ेंगे:
$ echo export TEST_VARIABLE=tecmint > .envrc
डिफ़ॉल्ट रूप से, सुरक्षा तंत्र .envrc फ़ाइल को लोड होने से रोकता है। चूंकि हम जानते हैं कि यह एक सुरक्षित फ़ाइल है, हमें निम्न कमांड चलाकर इसकी सामग्री को अनुमोदित करने की आवश्यकता है:
$ direnv allow .
अब जब .envrc फ़ाइल की सामग्री को लोड करने की अनुमति दे दी गई है, आइए पहले सेट किए गए TEST_VARIABLE के मान की जांच करें:
$ echo $TEST_VARIABLE
जब हम tecmint_project डायरेक्टरी से बाहर निकलते हैं, तो direnv अनलोड हो जाएगा और यदि हम एक बार फिर TEST_VARIABLE का मान जांचते हैं, तो यह खाली होना चाहिए:
$ cd .. $ echo $TEST_VARIABLE
हर बार जब आप tecmint_projects डायरेक्टरी में जाते हैं, तो .envrc फ़ाइल लोड हो जाएगी।
दिए गए .envrc के प्राधिकरण को रद्द करने के लिए, deny कमांड का उपयोग करें।
$ direnv deny . # वर्तमान डायरेक्टरी में # या $ direnv deny /path/to/.envrc
अधिक जानकारी और उपयोग निर्देशों के लिए, direnv मैन पेज देखें:
$ man direnv
इसके अलावा, direnv एक stdlib (direnv-stdlib) का भी उपयोग करता है जो कई फ़ंक्शंस के साथ आता है जो आपको आसानी से अपने PATH में नई डायरेक्टरी जोड़ने और बहुत कुछ करने की अनुमति देते हैं।
सभी उपलब्ध फ़ंक्शंस के दस्तावेज़ीकरण को खोजने के लिए, direnv-stdlib मैनुअल एंट्री पेज देखें:
$ man direnv-stdlib
आपके लिए बस इतना ही! यदि आपके कोई प्रश्न या विचार हैं, तो नीचे दिए गए फीडबैक फॉर्म का उपयोग करें।