Mac OS X स्रोत ~ / .bashrc क्यों नहीं? [डुप्लिकेट]


95

इस सवाल का पहले से ही यहाँ एक जवाब है:

मैंने पाया कि बहुत सारे लोग यह जानते हैं कि इसके समान निर्देश क्यों:

Put X to your ~/.bashrc and you can do Y

काम नहीं करते।

यह हमेशा पता चलता है कि मैक ओएस एक्स की बैश स्टार्टअप फाइलें (या मैक बैश ही) ~ / .Bashrc फाइल नहीं करती है, या तो लॉगिन शेल में, या विंडो सिस्टम से खोले गए शेल में - मैक ओएस एक्स में टर्मिनल ऐप की तरह)

ऐसा क्यों है, जब मैं पहले काम कर चुका हूं, बैश के साथ अन्य सभी यूनिक्स जैसी प्रणालियां ऐसा कर चुकी हैं?

पुनश्च:

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

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

स्रोत: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files


मैंने यह भी देखा कि ~/.bash_profileक्रियान्वित नहीं किया गया है ~/.bashrc। अजीब।
इगौरव 16

जवाबों:


90

OSX में डिफ़ॉल्ट रूप से टर्मिनल एक लॉगिन सत्र शुरू करता है ताकि रीड .bash_profile आदि (GUI लॉगिन प्रक्रिया जो आपके नाम और पासवर्ड के लिए पूछती है, शेल स्क्रिप्ट का उपयोग नहीं करती है और कोई शेल शुरू नहीं होता है यह सब लॉन्च और वर्कस्पेस से किया जाता है)

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

आपके द्वारा निर्दिष्ट GNU दस्तावेज़ से

एक इंटरैक्टिव गैर-लॉगिन शेल के रूप में आमंत्रित किया गया

जब एक इंटरेक्टिव शेल जो एक लॉगिन शेल नहीं होता है, तो बैश, इस फाइल के मौजूद होने पर ~ / .bashrc से कमांड पढ़ता और निष्पादित करता है। यह --norc विकल्प के उपयोग से बाधित हो सकता है। --Rcfile फ़ाइल विकल्प, बैश को ~ / .bashrc के बजाय फ़ाइल से कमांड को पढ़ने और निष्पादित करने के लिए मजबूर करेगा।

तो, आमतौर पर, आपके ~ / .bash_profile में लाइन होती है

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

किसी भी लॉगिन-विशिष्ट इनिशियलाइज़ेशन के बाद (या पहले)।


7
अयोग्यता = यूनिक्स?
पॉल Brewczynski

8
खैर मेरा मतलब है - मैं स्कूल में लैटिन झुकता हूं, इसलिए बहुवचन रूप को
हटा दें

8
... और तीसरा रूप "यूनिक्स" (हालांकि मुझे यूनिटी पसंद है)
इयरकैम

7
और चौथे "यूनिकॉर्न्स" ...
tink

8
चलो अशक्त रूप को मत भूलो, अर्थात "
यूनुस

19

bashकेवल गैर-लॉगिन गोले के .bashrcलिए पढ़ता है :

जब एक इंटरेक्टिव शेल जो लॉगिन शेल नहीं है, तो bash पढ़ता है और ~ / .bashrc से कमांड निष्पादित करता है, यदि यह फाइल मौजूद है। यह --norc विकल्प के उपयोग से बाधित हो सकता है। --Rcfile फ़ाइल विकल्प ~ / .bashrc के बजाय फ़ाइल से आदेशों को पढ़ने और निष्पादित करने के लिए बैश करने के लिए बाध्य करेगा।

जैसे ही टर्मिनल bashएक लॉगिन शेल के रूप में शुरू होता है ( wयह देखने के लिए कि bashइंस्टेंसेस को इस तरह निष्पादित किया जाता है -bash), .bashrcस्वचालित रूप से कभी नहीं पढ़ा जाता है।


तो मुद्दा यह है, कि मैक ओएस एक्स पर टर्मिना ऐप हमेशा बैश का "लॉगिन" उदाहरण बनाता है? क्यों ? यदि आप वास्तव में लॉगिन नहीं करते हैं। (आपने GUI से पहले लॉगिन किया है)
पॉल ब्रेवस्कीस्की

अन्य यूनिक्स सिस्टम क्यों पढ़ते हैं ~ / .bashrc?
पॉल ब्रूज़ेन्स्की 13

3
यहां कोई भी एप्पल द्वारा किए गए डिजाइन निर्णयों को समझाने की स्थिति में नहीं है। मैं दोनों पक्षों में आसानी से बहस कर सकता था लेकिन इससे कोई मदद नहीं मिलती। के रूप में यह है शायद सबसे अच्छा विकल्प है तो बस इसे स्वीकार
nohillside

वैसे यह पहली बार है जब आप शेल को चलाते हैं, इसलिए यह एक लॉगिन है, X11 आधारित यूनीसेस में आप शेल को चलाकर शुरू करते हैं जो तब X चलाता है इसलिए यह लॉगिन नहीं है
user151019

@PaulBrewczynski वेल लिनक्स में .bash_profile से .bashrc का कॉल है।
पॉल स्टेलियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.