আপনি যখন একটি লিনাক্স শেলে লগ ইন করেন, আপনি একটি নির্দিষ্ট ওয়ার্কিং এনভায়রনমেন্ট উত্তরাধিকার পান। একটি এনভায়রনমেন্ট, শেলের প্রেক্ষাপটে, মানে কিছু নির্দিষ্ট ভেরিয়েবল ইতিমধ্যে আপনার জন্য সেট করা থাকে, যা নিশ্চিত করে আপনার কমান্ডগুলো উদ্দেশ্য অনুযায়ী কাজ করে। উদাহরণস্বরূপ, PATH এনভায়রনমেন্ট ভেরিয়েবল ডিফাইন করে আপনার শেল কোথায় কমান্ড খুঁজে বের করবে। এটা না থাকলে, আপনি ব্যাশে যা করতে চান Почти সবই command not found এরর দিয়ে ফেল করবে। আপনার এনভায়রনমেন্ট, যতটুকু আপনি আপনার প্রতিদিনের কাজগুলো করার সময় অদৃশ্য থাকেন, অত্যন্ত গুরুত্বপূর্ণ।
আপনার শেল এনভায়রনমেন্টকে প্রভাবিত করার অনেক উপায় আছে। আপনি কনফিগারেশন ফাইলগুলিতে মডিফিকেশন করতে পারেন, যেমন ~/.bashrc এবং ~/.profile, আপনি স্টার্টআপে সার্ভিস রান করতে পারেন, এবং আপনি আপনার নিজস্ব কাস্টম কমান্ড বা আপনার নিজস্ব ব্যাশ ফাংশন স্ক্রিপ্ট করতে পারেন।
source দিয়ে আপনার এনভায়রনমেন্টে যোগ করুন
ব্যাশ (সाथে কিছু অন্যান্য শেল) এর একটি বিল্ট-ইন কমান্ড আছে যাকে 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 ব্যবহার করতে পারেন একটি ফাইল আপনার শেল এনভায়রনমেন্টে "ইম্পোর্ট" করতে, ঠিক যেমন আপনি C বা C++-এ include কীওয়ার্ড ব্যবহার করতে পারেন একটি লাইব্রেরি রেফারেন্স করার জন্য বা পাইথনে import কীওয়ার্ড একটি মডিউল আনার জন্য। এটি 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 খুঁজুন
আপনি যখন ব্যাশে source ব্যবহার করেন, এটি আপনার বর্তমান ডিরেক্টরিতে আপনার রেফারেন্স করা ফাইলটি সার্চ করে। এটি সব শেলে হয় না, তাই আপনার ডকুমেন্টেশন চেক করুন আপনি যদি ব্যাশ ব্যবহার না করেন।
যদি ব্যাশ ফাইলটি এক্সিকিউট করার জন্য খুঁজে না পায়, এটি আপনার PATH-এ সার্চ করে। আবারও, এটি সব শেলের জন্য ডিফল্ট নয়, তাই আপনার ডকুমেন্টেশন চেক করুন আপনি যদি ব্যাশ ব্যবহার না করেন।
এই দুটোই ব্যাশে চমৎকার সুবিধা ফিচার। এই বিহেভিয়ার আশ্চর্যजनকভাবে শক্তিশালী কারণ এটি আপনাকে সাধারণ ফাংশনগুলো আপনার ড্রাইভে একটি কেন্দ্রীয় লোকেশনে সংরক্ষণ করতে দেয় এবং তারপর আপনার এনভায়রনমেন্টকে একটি ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (IDE) হিসেবে ব্যবহার করতে দেয়। আপনাকে চিন্তা করতে হয় না আপনার ফাংশনগুলো কোথায় সংরক্ষিত, কারণ আপনি জানেন সেগুলো আপনার লোকাল সমতুল্য /usr/include-এ, তাই আপনি কোথায় আছেন সেটি নির্বিশেষে সোর্স করার সময় ব্যাশ সেগুলো খুঁজে পায়।
উদাহরণস্বরূপ, আপনি ~/.local/include নামে একটি ডিরেক্টরি তৈরি করতে পারেন সাধারণ ফাংশন সংরক্ষণের জন্য স্টোরেজ এরিয়া হিসেবে এবং তারপর এই ব্লক কোডটি আপনার .bashrc ফাইলে রাখতে পারেন:
for i in $HOME/.local/include/*;
do source $i
done
এটি ~/.local/include-এ কাস্টম ফাংশন ধারণকারী যেকোনো ফাইল আপনার শেল এনভায়রনমেন্টে "ইম্পোর্ট" করে।
ব্যাশ একমাত্র শেল যা বর্তমান ডিরেক্টরি এবং আপনার PATH উভয়ই সার্চ করে যখন আপনি হয় source বা . কমান্ড ব্যবহার করেন।
ওপেন সোর্সের জন্য source ব্যবহার
source বা . ব্যবহার করে ফাইল এক্সিকিউট করা আপনার এনভায়রনমেন্টকে প্রভাবিত করার একটি সুবিধাজনক উপায় আপনার পরিবর্তনগুলো মডুলার রাখে। পরবর্তীবার আপনি যখন বড় ব্লক কোড কপি-পেস্ট করার চিন্তা করবেন আপনার .bashrc ফাইলে, রিলেটেড ফাংশন বা এলিয়াসের গ্রুপগুলো ডেডিকেটেড ফাইলে রাখতে বিবেচনা করুন, এবং তারপর source ব্যবহার করে সেগুলো ইনজেস্ট করুন।