.bashrc
বাশের একটি কনফিগারেশন ফাইল, কেবলমাত্র এটি ইন্টারেক্টিভভাবে কার্যকর করা হয়। এটি কেবল তখনই লোড হয় যখন আপনি বাশ শুরু করেন, আপনি যখন অন্য কোনও প্রোগ্রাম চালানোর সময় sh
নয় ( যেমন নামের মাধ্যমে বাশকে ডাকেও না sh
)। এবং এটি কেবল তখনই লোড হয় যখন বাশ ইন্টারেক্টিভ হয়, যখন এটি কোনও স্ক্রিপ্ট বা কমান্ড ব্যবহার করে না -c
।
sudo sh -c 'echo $PATH'
বা sudo bash -c 'echo $PATH'
একটি ইন্টারেক্টিভ শেল প্রার্থনা করে না, তাই .bashrc
জড়িত নয়।
sudo su; echo $PATH
রুটের শেলের একটি ইন্টারেক্টিভ উদাহরণ চালায়। যদি এটি বাশ, তবে ~root/.bashrc
বোঝা হয়। এই স্নিপেটটি echo $PATH
একবার এই ইন্টারেক্টিভ শেলটি শেষ হয়ে গেলে কার্যকর করে , তাই ইন্টারেক্টিভ শেলের মধ্যে যা ঘটে তা শেষ পর্যন্ত স্নিপেট প্রিন্ট করে তার কোনও প্রভাব রাখে না। তবে আপনি যদি echo $PATH
ইন্টারেক্টিভ শেলের প্রম্পটে প্রারম্ভ করে টাইপ করেন তবে আপনি sudo su
সেট করা মানটি দেখতে পাবেন ~root/.bashrc
।
যেহেতু .bashrc
প্রতিটি ইন্টারেক্টিভ শেলের সাথে যুক্ত হয়, লগইন শেল দ্বারা নয় (এমনকি ইন্টারেক্টিভ লগইন শেল দ্বারাও নয়, যা বাশের মধ্যে নকশার ত্রুটিযুক্ত) তাই পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়নের জন্য এটি ভুল জায়গা। ব্যবহার করুন .bashrc
যেমন কি-বাইন্ডিং, alias লেখা এবং সমাপ্তির সেটিংস ইন্টারেক্টিভ ব্যাশ সেটিংসের জন্য। আপনি লগ ইন করার সময় লোড হওয়া ফাইলগুলিতে পরিবেশের ভেরিয়েবলগুলি সেট করুন: ~/.pam_environment
বা ~/.profile
।
সুতরাং সেট PATH
মধ্যে .profile
পরিবর্তে .bashrc
, এবং হয় সাথে একটি লগ-ইন শেল চালানোর sudo -i 'echo $PATH'
, অথবা স্পষ্টভাবে উৎস .profile
সঙ্গে sudo sh -c '. ~/.profile; echo $PATH'
।