OS X 10.6 स्नो लेपर्ड में $ PATH कहाँ मिलता है?


139

मैं echo $PATHकमांड लाइन पर टाइप करता हूं और मिलता हूं

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

मैं सोच रहा था कि यह कहां सेट हो रहा है क्योंकि मेरी .bash_loginफाइल खाली है।

मैं विशेष रूप से चिंतित हूँ कि, MacPorts स्थापित करने के बाद, इसने कबाड़ का एक गुच्छा स्थापित किया /opt। मुझे नहीं लगता कि वह निर्देशिका सामान्य मैक ओएस एक्स में भी मौजूद है।

अपडेट: मेरे कथन को सही करने के लिए jtimberman का धन्यवादecho $PATH


5
से टिप्पणी SMcCandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith भट्ट

@ सत्य, यह मुझे लगता है कि /etc/paths.dस्थापना स्क्रिप्ट के लिए उपयोगी है। यदि मैं अपनी इंस्टॉलेशन स्क्रिप्ट को पथ में स्थापित प्रोग्राम को जोड़ना चाहता हूं, तो मैं एक फ़ाइल को ड्रॉप कर सकता हूं /etc/paths.d। अगर मैं पथ को मैन्युअल रूप से संपादित करना चाहता हूं, /etc/pathsतो एक बेहतर विकल्प है।
haydenmuhl

मैंने ज्यादातर इस पोस्ट के आधार पर एक स्क्रिप्ट बनाई है, जो जल्दी से प्रिंट करती है जहां PATH को इन कई स्थानों पर परिभाषित किया गया है: gist.github.com/lopespm/6407349952bc8a1ff8fb
पेड्रो लोप्स

जवाबों:


161

जब bashयह शुरू होता है तो आप लॉग इन करते समय निम्न फ़ाइलों को पढ़ते हैं। ओएस एक्स के प्रयोजनों के लिए, इसका मतलब है कि हर बार जब आप एक नई Terminalविंडो खोलते हैं।

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

जब आप bashकमांड लाइन पर टाइप करके एक नया शेल शुरू करते हैं , तो यह पढ़ता है.bashrc

OS X ~/.MacOSX/environment.plistयदि आवश्यक हो तो पथ सहित अधिक पर्यावरण चर सेट करने के लिए भी उपयोग करता है।

अंत में, /etc/pathsऔर /etc/paths.dशेल द्वारा भी पढ़ा जाता है।


/opt/local/binआदि ~/.tcshrcMacPorts द्वारा जोड़े जाते हैं । में भी अवश्य देखें ~/.cshrc


5
जाहिर है, ~/.MacOSX/environment.plistकुछ लोगों के लिए काम नहीं करता है। में ओएस एक्स के लिए पथ बदलें फ़ोल्डर का उपयोग करके एक वैकल्पिक /etc/paths.dवर्णन किया गया है। मैंने उसका परीक्षण नहीं किया है।
अर्जन

के लिए +1 ~/.cshrc। पता लगाने की कोशिश क्यों ~/.profileनहीं कर रहा था पागल काम कर रहा है।
टोमलॉजिक

मुझे लगता है कि यह उत्तर अधूरा है। मैं यह पता लगाने की कोशिश कर रहा हूं कि एक त्रुटिपूर्ण (गैर-मौजूद) पथ: / usr / बिन / स्थानीय, मेरा शेल किस बारे में शिकायत कर रहा है, और यह उन फ़ाइलों में से किसी में नहीं है।
टॉमी

मुझे लगता .bashrcहै कि भले ही आप टाइप करें bashया नहीं, यह पढ़ा जाता है ।
जिओ पेंग - ZenUML.com

48

उस फ़ाइल को देखें /etc/paths, जिसका उपयोग किया जाता है /usr/libexec/path_helper, जिसका उपयोग किया जाता है /etc/profile

MacPorts के लिए, sudo /etc/paths/opt/local/binटर्मिनल विंडो का उपयोग करें और फिर से खोलें।


25

गंभीरता से, तेंदुए ने हमें रास्ता जोड़ने के लिए एक नया तरीका दिया। आप जिस पथ को जोड़ना चाहते हैं, उसमें एक फ़ाइल बनाएं और उसे /etc/paths.d में डालें

एक कदम में यह करने का एक त्वरित उदाहरण है:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

अन्यथा, आप बस /etc/paths.d पर जा सकते हैं और फ़ाइल को सीधे वहां रख सकते हैं। किसी भी तरह से, उस निर्देशिका में फ़ाइलों के किसी भी पथ भागों को डिफ़ॉल्ट पथ में जोड़ा जाएगा।

मैनपाट के लिए भी यह काम करता है।

यहाँ अधिक जानकारी के लिए एक लिंक है:

ars technica: मैं हिम तेंदुए में PATH में कुछ कैसे जोड़ूँ?

एक दूसरे नोट पर: MacPorts सब कुछ ऑप्ट डायरेक्टरी में डाल देता है क्योंकि यह Apple के सामान द्वारा उपयोग नहीं किया जाता है। इस तरह यह संघर्ष नहीं करेगा। उनके मार्गदर्शक (उत्कृष्ट रूप से लिखित, BTW) का एक स्पष्टीकरण है कि यह ऑप्ट का उपयोग क्यों करता है और यदि आप चाहें तो उस डिफ़ॉल्ट को कैसे बदलना है।

MacPorts गाइड


बहुत ही शांत। अब हम केवल उन लोगों के पथ निर्भर अनुप्रयोगों पाने के लिए अब हमारे प्रोफ़ाइल फ़ाइलों को प्रदूषित करने के लिए है ...
डैनियल बेक

इसे प्यार करना। सरल!
एंड्रयू हेजेस

से टिप्पणी SMcCandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith भट्ट

सिंगल लाइन, फाइलों के लिए कोई आकर्षक और आसान हटाने के लिए नहीं। इसे प्रेम करें। धन्यवाद लीन
इब्राहिम

4

अपना रास्ता दिखाने के लिए, $ PATH की प्रतिध्वनि करें।

echo $PATH

अपना पथ सेट करने के लिए, संपादित करें ~/.bash_profile, नहीं ~/.bash_login


3

Ssh द्वारा निर्धारित पथ भी है ।

से तुलना echo $PATHकरें ssh localhost 'echo $PATH'। चूँकि ssh नहीं पढ़ता / etc / profile, / usr / libexec / path_helper नहीं चलता है और इस प्रकार / etc / रास्तों को छोड़ दिया जाता है। अब कोशिश करो ssh localhost 'source /etc/profile; echo $PATH'। रास्ते करीब होने चाहिए। शेष अंतर आपके .bash_profile (जो ssh द्वारा भी छोड़ दिया गया है) में पथ संशोधन के कारण होगा और .bashrc (जो ssh द्वारा पढ़ा जाता है)।

यदि आप चाहते हैं कि आपका ssh पथ आपके सामान्य टर्मिनल पथ के समान हो, तो आप source /etc/profileअपने .bashrc में जोड़ सकते हैं ।


संकेत के लिए धन्यवाद! मैं ssh के साथ समाधान के लिए बिल्कुल देख रहा था। svn + ssh को svnerve कमांड ठीक से नहीं मिल पाया क्योंकि svnerve के लिए रास्ता। inprofile में था, लेकिन inbashrc में नहीं था।
KIR

2

इसे या तो परिभाषित किया जा सकता है:

  • सिस्टम चर - /etc/paths
  • उपयोगकर्ता चर - @Steve Folly की व्याख्या देखें

1

वास्तव में यह आपकी .profileफ़ाइल में संग्रहीत किया जाता है .bash_loginऔर यह आम है कि MacPorts .bash_loginफ़ाइल के बजाय इसका उपयोग करेगा ।

इसके अलावा /optनिर्देशिका आमतौर पर MacPorts द्वारा बनाई गई है और यह इस फ़ोल्डर में अपनी फ़ाइलों को संग्रहीत करता है।


1

उपयोगिता के लिए डॉक्स के बारे में /usr/libexec/path_helper, $ PATH के लिए प्रारंभिक घटकों /etc/pathsको डिफ़ॉल्ट रूप से और जैसे लिया गया था

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

OS-X हिम तेंदुए के लिए

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