কম্পিউটার টিউটোরিয়াল

Direnv: লিনাক্স ও macOS-এ প্রজেক্ট-নির্দিষ্ট এনভায়রনমেন্ট ভেরিয়েবল ব্যবস্থাপনার সহজ উপায়

Direnv হল আপনার শেলের জন্য একটি সুবিধাজনক ওপেন-সোর্স এক্সটেনশন, যা ইউনিক্স অপারেটিং সিস্টেম যেমন লিনাক্স এবং macOS-এ কাজ করে। এটি একটি একক স্ট্যাটিক এক্সিকিউটেবলে কম্পাইল করা হয়েছে এবং bash, zsh, tcsh, এবং fish শেল সমর্থন করে।

Direnv কেন ব্যবহার করবেন?

Direnv-এর মূল উদ্দেশ্য হল প্রজেক্ট-নির্দিষ্ট এনভায়রনমেন্ট ভেরিয়েবল অনুমতি দেওয়া, যাতে ~/.profile বা সংশ্লিষ্ট শেল স্টার্টআপ ফাইল গুলো অस्त-ব্যস্ত না হয়। এটি বর্তমান ডিরেক্টরির উপর নির্ভর করে এনভায়রনমেন্ট ভেরিয়েবল লোড এবং আনলোড করার একটি নতুন পদ্ধতি বাস্তবায়ন করে।

এটি 12factor অ্যাপস (সফটওয়্যার-অ্যাজ-এ-সার্ভিস অ্যাপ তৈরি করার একটি পদ্ধতি) এর এনভায়রনমেন্ট ভেরিয়েবল লোড করতে, প্রতি-প্রজেক্ট পৃথক ডেভেলপমেন্ট এনভায়রনমেন্ট তৈরি করতে, এবং ডিপ্লয়মেন্টের জন্য সিক্রেট লোড করতে ব্যবহৃত হয়। এছাড়া, এটি rbenv, pyenv, এবং phpenv-এর মতো মাল্টি-ভার্সন ইনস্টলেশন এবং ব্যবস্থাপনার সমাধান তৈরি করতে ব্যবহার করা যেতে পারে।

Direnv কিভাবে কাজ করে?

শেল একটি কমান্ড প্রম্প্ট লোড করার আগে, direnv বর্তমান ডিরেক্টরিতে (যে pwd কমান্ড দিয়ে দেখানো যায়) এবং প্যারেন্ট ডিরেক্টরিতে .envrc ফাইলটির অস্তিত্ব যাচাই করে। প্রতিটি প্রম্পটে এই যাচাই প্রক্রিয়া অত্যন্ত দ্রুত এবং শম্ভাব্যভাবে অদৃশ্য।

যখন এটি উপযুক্ত পারমিশনের সাথে .envrc ফাইলটি খুঁজে পায়, এটি একটি bash সাব-শেলে লোড করে এবং সমস্ত এক্সপোর্ট করা ভেরিয়েবল ক্যাপচার করে বর্তমান শেলে উপলব্ধ করে দেয়।

লিনাক্স সিস্টেমে Direnv ইনস্টল করা

বেশিরভাগ লিনাক্স ডিস্ট্রিবিউশনে, direnv প্যাকেজটি ডিফল্ট রিপোজিটরিতে থেকে আপনার সিস্টেম প্যাকেজ ম্যানেজার ব্যবহার করে ইনস্টল করার জন্য উপলব্ধ থাকে:

$ sudo apt install direnv  #Debian, Ubuntu এবং Mint
$ sudo dnf install direnv  #Fedora

Red Hat Enterprise Linux (RHEL) এবং CentOS বা স্ন্যাপ সমর্থনকারী যেকোনো ডিস্ট্রিবিউশনে, আপনি এটি একটি স্ন্যাপ হিসেবে ইনস্টল করতে পারেন। এতে আপনার সিস্টেমে snapd ইনস্টল থাকতে হবে।

$ sudo snap install direnv

আপনার Bash শেলে Direnv হুক করা

Direnv ইনস্টল করার পর, আপনাকে এটিকে আপনার বর্তমান লিনাক্স শেলে হুক করতে হবে। উদাহরণস্বরূপ 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

লিনাক্স শেলে Direnv ব্যবহার করা

Direnv কিভাবে কাজ করে তা প্রদর্শন করার জন্য, আমরা tecmint_projects নামে একটি নতুন ডিরেক্টরি তৈরি করব এবং সেখানে যাব।

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

এখন, কমান্ড লাইনে TEST_VARIABLE নামে একটি নতুন ভেরিয়েবল তৈরি করি এবং যখন এটি ইকো করব, মান খালি হওয়া উচিত:

$ echo $TEST_VARIABLE

এখন আমরা একটি নতুন .envrc ফাইল তৈরি করব যাতে Bash কোড থাকে যা direnv লোড করবে। আমরা এটিতে "export TEST_VARIABLE=tecmint" লাইনটি যোগ করব echo কমান্ড এবং আউটপুট রিডাইরেকশন ক্যারেক্টার (>) ব্যবহার করে:

$ echo export TEST_VARIABLE=tecmint > .envrc

ডিফল্টভাবে, নিরাপত্তা মেকানিজম .envrc ফাইল লোড ব্লক করে। যেহেতু আমরা জানি এটি একটি নিরাপদ ফাইল, তাই নিচের কমান্ড চালিয়ে এর কন্টেন্ট অনুমোদন করতে হবে:

$ direnv allow .

এখন .envrc ফাইলের কন্টেন্ট লোড করার অনুমতি পেয়েছে, চলুন আগে সেট করা TEST_VARIABLE এর মান চেক করি:

$ echo $TEST_VARIABLE

যখন আমরা tecmint_project ডিরেক্টরি থেকে বের হব, direnv আনলোড হবে এবং একবার nữa TEST_VARIABLE এর মান চেক করলে তা খালি হওয়া উচিত:

$ cd ..
$ echo $TEST_VARIABLE

প্রতিবার আপনি tecmint_projects ডিরেক্টরিতে যাবেন, .envrc ফাইলটি নিচের স্ক্রিনশটের মতো লোড হবে:

$ cd tecmint_projects/

একটি নির্দিষ্ট .envrc এর অনুমোদন রদ করতে deny কমান্ড ব্যবহার করুন।

$ direnv deny .  # বর্তমান ডিরেক্টরির জন্য
$ direnv deny /path/to/.envrc

আরও তথ্য এবং ব্যবহারের নির্দেশাবলীর জন্য direnv ম্যান পেজ দেখুন:

$ man direnv

অতিরিক্তভাবে, direnv একটি stdlib (direnv-stdlib) ব্যবহার করে যাতে আপনার PATH-এ সহজে নতুন ডিরেক্টরি যোগ করা এবং আরও অনেক কিছু করার ফাংশন থাকে।

সभी উপলব্ধ ফাংশনের ডকুমেন্টেশন পেতে direnv-stdlib ম্যানুয়াল এন্ট্রি পেজ চেক করুন:

$ man direnv-stdlib

এই আর্টিকেলে আপনাদের জন্য এতটুকু ছিল! আপনার কোনো প্রশ্ন বা মতামত থাকলে নিচের ফিডব্যাক ফর্ম ব্যবহার করুন।

  1. রুবি অন রেলসে এনভায়রনমেন্ট ভেরিয়েবল মাস্টার করুন: একটি সম্পূর্ণ গাইড

  2. লিনাক্স শেল স্ক্রিপ্টিং: ভেরিয়েবল নিয়ে গভীরে দৃষ্টিপাত – পার্ট ৯

  3. রুবিতে এনভায়রনমেন্ট ভেরিয়েবল মাস্টার করুন: একটি প্র্যাকটিক্যাল গাইড

  4. Windows 10 এনভায়রনমেন্ট ভেরিয়েবল সেট করুন: ধাপে ধাপে গাইড