एक गोले के रूप में बैश शुरू करने के लिए गनोम-टर्मिनल कॉन्फ़िगर करें, पढ़े नहीं ।bashrc


24

मैं आरवीएम को गनोम-टर्मिनल के साथ एकीकृत करने की कोशिश कर रहा हूं ।

डिफ़ॉल्ट रूप से, गनोम-टर्मिनल लॉगिन शेल के रूप में बैश शुरू नहीं करता है। मैंने इसी उत्तर में आरवीएम स्थापित करने वाले विषय के बारे run command as a login shellमें सुझाव के रूप में सक्षम किया , लेकिन जब मैं ऐसा करता हूं तो फ़ाइल को पढ़ा नहीं जाता है।.bashrc

उदाहरण के लिए, मैं एक वातावरण चर बनाता हूं .bashrcऔर फिर जब मैं एक नया सूक्ति-टर्मिनल शुरू करता हूं तो मैं इसे नहीं पढ़ सकता। मुझे source .bashrcफ़ाइल पढ़ने के लिए स्पष्ट रूप से चलाने की आवश्यकता है ।

क्या यह अपेक्षित व्यवहार है?

जवाबों:


38

हां, यह अपेक्षित व्यवहार है।

व्यवहार, संक्षेप में, इस प्रकार है:

  • बैश एक इंटरैक्टिव लॉगिन शेल के रूप में शुरू हुआ: पढ़ता है ~/.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"

अब यदि बैश को इंटरेक्टिव लॉगिन शेल के रूप में शुरू किया जाता है तो यह निम्नलिखित फाइलों को पढ़ेगा:

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

और अगर बैश को एक इंटरैक्टिव गैर-लॉगिन शेल के रूप में शुरू किया गया है:

  1. ~/.bashrc

आपको वह सामान रखना चाहिए जो कि बैग में विशिष्ट हो ~/.bashrcऔर जो सामान में विशिष्ट न हो ~/.profile। उदाहरण के लिए अंदर PATHजाता है ~/.profileऔर अंदर HISTCONTROLजाता है ~/.bashrc

ध्यान दें कि ~/.profileबैश विशिष्ट नहीं है। अन्य पाठ आधारित गोले (उदाहरण के लिए श या ksh) और चित्रमय गोले (सूक्ति) भी पढ़ें ~/.profile। यही कारण है कि आपको बैश विशिष्ट सामान को अंदर नहीं रखना चाहिए ~/.profile


1
+1। धन्यवाद, यह मुझे दीवार पर
चढ़ा रहा था

1
mywiki.wooledge.org/DotFiles कुछ इतिहास बताता है कि यह ऐसा क्यों है। Rvm के साथ इस समस्या का मुख्य कारण है कि rvm कोड डालता है, जिसका अर्थ है कि ~/.bashrcप्रोफाइल में इसके बजाय पहले स्थान पर होना चाहिए। दोष rvm पर है।
जिरह

@Geirha के अनुसार उन्हें इस्तेमाल करना चाहिए था~/.profile
sanmai

तर्क यह है कि प्रोफाइल स्क्रिप्ट .bashrcरिश्तेदार के मूल्यांकन को नियंत्रित कर सकती है कि उसे क्या करना है। यदि इंटरेक्टिव शेल हमेशा पढ़ा जाता है .bashrcजो पहले या बाद में होना चाहिए .profile? क्या होगा यदि आप कुछ चीजें सेट करना चाहते हैं, .bashrcजिसमें .profileदी गई हैं? और एक ही समय में आप कुछ चीजें चाहते .bashrcहैं जिस पर भरोसा करना है .profile? न ही लोडिंग ऑर्डर दोनों परिदृश्यों को संतुष्ट करेगा।
काज

11

यह न तो एक खराब डिजाइन निर्णय है, न ही बग, और न ही शेल और टर्मिनलों का अपेक्षित व्यवहार है

यह गनोम टर्मिनल में प्रति-प्रोफ़ाइल कॉन्फ़िगरेशन विकल्प का केवल एक दुर्भाग्यपूर्ण डिफ़ॉल्ट मान है, जिसे आप आसानी से ठीक कर सकते हैं।

  1. संपादित करें पर जाएं -> प्रोफ़ाइल प्राथमिकताएं

  2. का चयन करें शीर्षक और कमान टैब।

  3. ध्यान दें कि लॉगिन शेल चेकबॉक्स के रूप में रन कमांड कैसे अनियंत्रित है! इसे जाँचे।

बस। यदि आप Defaultप्रोफ़ाइल के लिए ऐसा करते हैं , या नए टर्मिनल बनाते समय उपयोग किए जाने वाले प्रोफ़ाइल को कॉन्फ़िगर किया जाता है, तो आपको एक लॉगिन शेल मिलता है।

मैं अनुमान लगा रहा हूं कि हुड के तहत, यह विकल्प संभवतः -lशेल के विकल्प को पास करने का कारण बनता है ।


0

मेरे पास एक ही प्रश्न था, और एक समाधान मिला: बस एक वास्तविक लॉगिन शेल के लिए SSH का उपयोग करें!

1. सुपरयुसर के रूप में, पूर्ण अलगाव के लिए एक समर्पित rvm सिस्टम उपयोगकर्ता बनाएँ, और एक पासवर्ड असाइन करें:

sudo su

useradd -m rvmuser

passwd rvmuser

2. निर्भरताएं स्थापित करें ताकि आरवीएम सुपरयूज़र पासवर्ड के बिना पूछे माणिक का निर्माण कर सके:

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. एक वास्तविक लॉगिन शेल के लिए लोकलहोस्ट में SSH (आपको हो सकता है apt-get install ssh)

ssh rvmuser@localhost

4. आरवीएम स्थापित करें

\curl -sSL https://get.rvm.io | bash -s stable

5. लॉग आउट करें और फिर से वापस जाएं ताकि सभी आरवीएम फ़ंक्शन लोड हो जाएं

exit

ssh rvmuser@localhost

6. rvm का प्रयोग करें :)


0

प्रोफ़ाइल इनिशियलाइज़ेशन को रखने के लिए बैश का उपयोग करते समय यह आम है .bash_profile, जो केवल लॉगिन पर बैश द्वारा पढ़ा जाता है, जबकि अन्य गोले ऐतिहासिक रूप से साझा किए गए हैं .profile। यह आपको बैश-विशिष्ट कमांड को अंदर रखने की अनुमति देता है .bash_profile

निम्नलिखित में से एक का उपयोग आमतौर पर उन उपनामों में खींचने के लिए किया जाता है जिन्हें निम्न में परिभाषित किया गया है .bashrc:

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.