हां, यह अपेक्षित व्यवहार है।
व्यवहार, संक्षेप में, इस प्रकार है:
- बैश एक इंटरैक्टिव लॉगिन शेल के रूप में शुरू हुआ: पढ़ता है
~/.profile
- बैश एक इंटरैक्टिव गैर-लॉगिन शेल के रूप में शुरू हुआ: पढ़ता है
~/.bashrc
अधिक जानकारी के लिए स्टार्टअप फ़ाइलों के बारे में बैश मैनुअल पढ़ें ।
व्यक्तिगत रूप से, मुझे लगता है कि यह व्यवहार अजीब है और मुझे अभी तक इस डिजाइन निर्णय के लिए युक्तिकरण नहीं मिला है।
शब्दावली की कुछ व्याख्या:
- एक इंटरैक्टिव शेल एक शेल है जिसके साथ आप बातचीत कर सकते हैं, इसका मतलब है कि आप इसमें कमांड टाइप कर सकते हैं। आपके द्वारा उपयोग किए जाने वाले अधिकांश गोले इंटरैक्टिव गोले हैं।
- एक गैर-संवादात्मक खोल एक खोल है जिसके साथ आप बातचीत नहीं कर सकते। शेल स्क्रिप्ट गैर-इंटरैक्टिव शेल के अंदर चलती हैं।
- एक लॉगिन खोल खोल जो शुरू कर दिया है, जब आप अपने सिस्टम के लिए लॉग इन है।
- एक गैर-लॉगिन शेल एक शेल है जिसे लॉगिन प्रक्रिया के बाद शुरू किया जाता है।
आपके द्वारा देखे जाने वाले अधिकांश गोले संवादात्मक गैर-लॉगिन गोले हैं । यह विशेष रूप से सच है अगर आप एक ग्राफिकल वातावरण चला रहे हैं जैसे कि सूक्ति, क्योंकि तब सूक्ति "लॉगिन शेल" है। सूक्ति के अंदर शुरू किया गया कोई भी बैश सत्र एक गैर-लॉगिन शेल है। यदि आप एक वास्तविक इंटरेक्टिव लॉगिन शेल देखना चाहते हैं तो एक वर्चुअल कंसोल (उपयोग करके Ctrl+Alt+F1
) पर जाएं और फिर अपने उपयोगकर्ता नाम और पासवर्ड का उपयोग करके लॉग इन करें। यह एक वास्तविक इंटरैक्टिव लॉगिन बैश शेल है। आप ग्राफिकल शेल का उपयोग करके वापस जा सकते हैं Ctrl+Alt+F7
।
एक विकल्प है --login
जो बैश व्यवहार करेगा जैसे कि यह एक लॉगिन शेल है भले ही आपके लॉगिन के बाद शुरू हो गया हो। लॉगिन शेल के रूप में बैश शुरू करने के लिए गनोम-टर्मिनल को कॉन्फ़िगर करना इसका मतलब है कि यह --login
विकल्प का उपयोग करके बैश करना शुरू कर देगा ।
आमतौर पर आप चाहते हैं कि बैश हमेशा ~/.bashrc
एक इंटरैक्टिव शेल में पढ़ें । यहां बताया गया है कि मैं ऐसा करने की सलाह देता हूं:
एक ~/.bash_profile
फ़ाइल बनाएँ । बैश एक लॉगिन शेल के रूप में शुरू कर दिया गया है, तो यह पहली बार के लिए दिखेगा ~/.bash_profile
की तलाश से पहले ~/.profile
। अगर बैश मिल जाए ~/.bash_profile
तो नहीं पढ़ेगा ~/.profile
।
निम्नलिखित पंक्तियाँ इसमें डालें ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
अब यदि बैश को इंटरेक्टिव लॉगिन शेल के रूप में शुरू किया जाता है तो यह निम्नलिखित फाइलों को पढ़ेगा:
~/.bash_profile
~/.profile
~/.bashrc
और अगर बैश को एक इंटरैक्टिव गैर-लॉगिन शेल के रूप में शुरू किया गया है:
~/.bashrc
आपको वह सामान रखना चाहिए जो कि बैग में विशिष्ट हो ~/.bashrc
और जो सामान में विशिष्ट न हो ~/.profile
। उदाहरण के लिए अंदर PATH
जाता है ~/.profile
और अंदर HISTCONTROL
जाता है ~/.bashrc
।
ध्यान दें कि ~/.profile
बैश विशिष्ट नहीं है। अन्य पाठ आधारित गोले (उदाहरण के लिए श या ksh) और चित्रमय गोले (सूक्ति) भी पढ़ें ~/.profile
। यही कारण है कि आपको बैश विशिष्ट सामान को अंदर नहीं रखना चाहिए ~/.profile
।