यह लेख बताएगा कि निम्नलिखित फ़ाइलों को किस क्रम में निष्पादित किया जाता है:
- /etc/profile
- ~/.bash_profile
- ~/.bashrc
- ~/.bash_login
- ~/.profile
- ~/.bash_logout
इंटरैक्टिव लॉगिन शेल के लिए निष्पादन क्रम
निम्नलिखित स्यूडो कोड इन फ़ाइलों के निष्पादन के क्रम को समझाता है।
execute /etc/profile IF ~/.bash_profile exists THEN execute ~/.bash_profile ELSE IF ~/.bash_login exist THEN execute ~/.bash_login ELSE IF ~/.profile exist THEN execute ~/.profile END IF END IF END IF
जब आप इंटरैक्टिव शेल से लॉगआउट करते हैं, तो निष्पादन का क्रम निम्नलिखित होता है:
IF ~/.bash_logout exists THEN execute ~/.bash_logout END IF
कृपया ध्यान दें कि /etc/bashrc को ~/.bashrc द्वारा निष्पादित किया जाता है जैसा कि नीचे दिखाया गया है:
# cat ~/.bashrc if [ -f /etc/bashrc ]; then . /etc/bashrc fi
इंटरैक्टिव नॉन-लॉगिन शेल के लिए निष्पादन क्रम
नॉन-लॉगिन इंटरैक्टिव शेल लॉन्च करते समय, निष्पादन का क्रम निम्नलिखित होता है:
IF ~/.bashrc exists THEN execute ~/.bashrc END IF
नोट: जब एक नॉन-इंटरैक्टिव शेल शुरू होता है, तो यह ENV पर्यावरण वेरिएबल को देखता है, और ENV वेरिएबल में उल्लिखित फ़ाइल नाम को निष्पादित करता है।
निष्पादन क्रम का परीक्षण करें
निष्पादन क्रम का परीक्षण करने का एक तरीका इन फ़ाइलों में अलग-अलग PS1 मान जोड़ना और शेल में फिर से लॉगिन करना है और देखें कि Linux प्रॉम्प्ट द्वारा कौन सा PS1 मान लिया गया था। इसके अलावा, हमने पहले चर्चा की थी कि PS1 का उपयोग करके अपने Linux प्रॉम्प्ट को कार्यात्मक और स्टाइलिश कैसे बनाया जाए।
1. /etc/profile निष्पादित होता है। /etc/profile में निम्नलिखित PS1 लाइन जोड़ें और यह सुनिश्चित करने के लिए फिर से लॉगिन करें कि Linux प्रॉम्प्ट /etc/profile के अंदर सेट PS1 मान में बदल जाए।
# grep PS1 /etc/profile PS1="/etc/profile> " [नोट: प्रॉम्प्ट परिवर्तन देखने के लिए फिर से लॉगिन करें जैसा कि नीचे दिखाया गया है] Last login: Sat Sep 27 16:43:57 2008 from 192.168.1.2 /etc/profile>
कृपया सुनिश्चित करें कि ~/.bash_profile में उपरोक्त के ठीक से काम करने के लिए कोई PS1 नहीं है।
2. ~/.bash_profile निष्पादित होता है: ~/.bash_profile, ~/.bash_login, ~/.profile और ~/.bashrc में निम्नलिखित PS1 जोड़ें। फिर से लॉगिन करके सुनिश्चित करें कि Linux प्रॉम्प्ट ~/.bash_profile के अंदर सेट PS1 मान में बदल जाए जैसा कि नीचे दिखाया गया है।
/etc/profile> grep PS1 ~/.bash_profile export PS1="~/.bash_profile> " /etc/profile> grep PS1 ~/.bash_login export PS1="~/.bash_login> " /etc/profile> grep PS1 ~/.profile export PS1="~/.profile> " /etc/profile> grep PS1 ~/.bashrc export PS1="~/.bashrc> " [नोट: पुनः लॉगिन पर, इसने पहले /etc/profile और फिर ~/.bash_profile निष्पादित किया। इसलिए, इसने ~/.bash_profile से PS1 लिया जैसा कि नीचे दिखाया गया है। इसने ~/.bash_login को निष्पादित नहीं किया, क्योंकि ~/.bash_profile मौजूद है] Last login: Sat Sep 27 16:48:11 2008 from 192.168.1.2 ~/.bash_profile>
3. ~/.bash_login निष्पादित होता है। .bash_profile का नाम बदलकर कुछ और कर दें। फिर से लॉगिन करके सुनिश्चित करें कि Linux प्रॉम्प्ट ~/.bash_login के अंदर सेट PS1 मान में बदल जाए जैसा कि नीचे दिखाया गया है।
~/.bash_profile> mv .bash_profile bash_profile_not_used [नोट: पुनः लॉगिन पर, इसने पहले /etc/profile निष्पादित किया। चूंकि यह ~/.bash_profile नहीं ढूंढ सका, इसने ~/.bash_login निष्पादित किया] Last login: Sat Sep 27 16:50:55 2008 from 192.168.1.2 ~/bash_login>
4. ~/.profile निष्पादित होता है। .bash_login का नाम बदलकर कुछ और कर दें। फिर से लॉगिन करके सुनिश्चित करें कि Linux प्रॉम्प्ट ~/.profile के अंदर सेट PS1 मान में बदल जाए जैसा कि नीचे दिखाया गया है।
~/.bash_login> mv .bash_login bash_login_not_used [नोट: पुनः लॉगिन पर, इसने पहले /etc/profile निष्पादित किया। चूंकि यह ~/.bash_profile और ~/.bash_login नहीं ढूंढ सका, इसने ~/.profile निष्पादित किया] Last login: Sat Sep 27 16:56:36 2008 from 192.168.1.2 ~/.profile>
5. नॉन-लॉगिन शेल परीक्षण के लिए ~/.bashrc निष्पादित होता है. कमांड प्रॉम्प्ट पर "bash" निष्पादित करने से एक और नॉन-लॉगिन शेल मिलेगा, जो .bashrc को लागू करेगा जैसा कि नीचे दिखाया गया है।
~/.profile> bash [नोट: यह नीचे दिखाए अनुसार .bashrc से PS1 प्रदर्शित करता है.] ~/.bashrc> exit exit [नोट: नॉन-लॉगिन शेल से बाहर निकलने के बाद, हम लॉगिन शेल पर वापस आ गए हैं] ~/.profile>