मैक ओएस एक्स ने $ PATH का मूल्य कैसे निर्धारित किया है?


12

मुझे इस बारे में एक बुनियादी समझ है कि $ PATH को कैसे सेट किया जा सकता है, लेकिन क्या एक दस्तावेज है जो पूरी तरह से वर्णन करता है कि मैक ओएस को उन सभी रास्तों पर जाने के लिए जो $ PATH से जुड़ जाते हैं? मैं जैसी चीजों के बारे में पता कर रहा हूँ /etc/profile, /etc/pathsऔर /etc/profile.dहै, लेकिन वहाँ अन्य लिपियों अंत में $ पथ का मूल्य को प्रभावित है कि कर रहे हैं? मैं गैर-लॉगिन और लॉगिन शेल ( .bashrc, .bash_profile) के बीच बहुत परिचित नहीं हूं , लेकिन मैं बुनियादी अंतरों से अवगत हूं।

जवाबों:


9

आमतौर पर, आपका पेट खोल द्वारा निर्धारित किया जाता है। बैश के लिए, मैनुअल में सब कुछ समझाया गया है । आप भाग man bashको खोल और छोड़ भी सकते हैं INVOCATION

एक इंटरेक्टिव लॉगिन शेल के रूप में, या क्लोएजिन के साथ आमंत्रित किया गया

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

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

जब एक इंटरेक्टिव शेल जो लॉगिन शेल नहीं है, तो बैश, इस फाइल के मौजूद होने पर ~ / .bashrc से कमांड पढ़ता है और निष्पादित करता है। ओएस एक्स में, इसके अतिरिक्त, path_helperवह सामग्री है जो /etc/paths.dआपके पथ को पढ़ती है और उन पर निर्भर करती है।

यहां कुंजी यह है कि ओएस एक्स पर, टर्मिनल डिफ़ॉल्ट रूप से एक लॉगिन शेल खोलता है, जबकि लिनक्स पर, शेल को आमतौर पर गैर-लॉगिन लॉग के रूप में शुरू किया जाता है। जोश स्टैगर में लॉगिन बनाम गैर-लॉगिन गोले की अच्छी व्याख्या है

इसलिए, अनिवार्य रूप से केवल ये दो तीन हैं जहां आप पथ निर्धारित कर सकते हैं:

  • /etc/profile(जो कॉल करता है path_helper)
  • /etc/pathsऔर /etc/paths.d(से बुलाया path_helper)
  • आपकी शेल कॉन्फ़िगरेशन फ़ाइल ( .bash_profile)

संक्षिप्त और जानकारीपूर्ण उत्तर के लिए धन्यवाद। इसलिए मुझे लगता है कि मैं इस तरह की समझ रखता हूं कि कौन सी स्क्रिप्ट / कलाकृतियां $ PATH को प्रभावित करती हैं। तो क्या इसका मतलब यह है कि /etc/profileमुख्य रूप से बैश द्वारा उपयोग की जाने वाली स्क्रिप्ट है? मेरे पास अन्य गोले के साथ अनुभव नहीं है, लेकिन मुझे लगता है कि वे एक अलग संरचना का पालन करते हैं?
साइको पंच

/etc/profileसबसे (सभी? नहीं 100% यकीन है कि) गोले द्वारा प्रयोग किया जाता है। यही कारण है कि यह एक अच्छा विकल्प है कि आप हर जगह चाहते हैं, जैसे कि पेट्स। बैश .bash_फाइलें पढ़ता है जबकि Zsh उदाहरण के .zshrcलिए दूसरों के अलावा पढ़ता है। यह शेल पर निर्भर करता है।
स्लेट

"OS X में, इसके अतिरिक्त, path_helper है जो /etc/paths.d की सामग्री को पढ़ता है और उन लोगों को आपके पथ पर भेजता है।" नहीं है, path_helperहै इंटरैक्टिव गैर लॉगिन गोले (और न ही गैर-सहभागी गोले) का आह्वान किया। यह /etc/profileवास्तव में इंटरेक्टिव लॉगिन गोले के लिए कहा जाता है ।
मैगीरो

8

पथ /etc/pathsऔर /etc/paths.d/*आमतौर पर path_helperPATH द्वारा जोड़े जाते हैंpath_helperसे चलाया जाता है /etc/profile, इसलिए इसे तब चलाया जाता है जब बैश को एक इंटरेक्टिव लॉगिन शेल के रूप में आमंत्रित किया जाता है, लेकिन तब नहीं जब बैश को एक गैर-लॉगिन शेल या एक गैर-इंटरैक्टिव शेल के रूप में आमंत्रित किया जाता है।

/etc/pathsशामिल /usr/local/binडिफ़ॉल्ट रूप से अंत में, और /etc/paths.d/डिफ़ॉल्ट रूप से खाली है।

टर्मिनल और iTerm 2 डिफ़ॉल्ट रूप से लॉगिन गोले के रूप में नए गोले खोलते हैं, और खोल दिया जब आप अपने कंप्यूटर के लिए ssh भी एक लॉगिन खोल है। अन्य प्लेटफार्मों पर कई टर्मिनल एमुलेटर tmux, और Emacs में शेल मोड नए शेल खोलते हैं, हालांकि गैर-लॉगिन शेल।

मैंने इस पंक्ति को इसमें जोड़ा है /etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

यह PATHरूट लॉन्च प्रक्रिया के मूल्य को बदलता है। मूल्य प्रति उपयोगकर्ता लॉन्च प्रक्रिया सहित अन्य सभी प्रक्रियाओं द्वारा विरासत में मिला है। आप /etc/launchd.confफिर से शुरू करके, या launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confप्रक्रियाओं को चलाकर और पुन: लॉन्च करके परिवर्तन लागू कर सकते हैं।

OS X पर, ~/.profileजब आप ग्राफ़िकल रूप से लॉग इन करते हैं तो पढ़ा नहीं जाता है। यदि दोनों ~/.bash_profileऔर ~/.profileमौजूद हैं, तो बैश ~/.profileया तो नहीं पढ़ता है ।

~/.MacOSX/environment.plist 10.8 में काम करना बंद कर दिया।

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