मैं ओएस एक्स पर वैश्विक पैठ पर्यावरण चर कैसे सेट करूं?


101

मैं OS X पर वैश्विक PATH पर्यावरण चर के लिए अपील करना चाहता हूं ताकि सभी उपयोगकर्ता के गोले और GUI अनुप्रयोगों को एक ही पाथ वातावरण मिले।

मुझे पता है कि मैं शेल स्टार्टअप स्क्रिप्ट में पथ के लिए अपील कर सकता हूं, लेकिन उन सेटिंग्स को जीयूआई अनुप्रयोगों द्वारा विरासत में नहीं मिला है।

अभी तक मुझे जो एकमात्र तरीका मिला है, वह /etc/launchd.conf में PATH पर्यावरण चर को फिर से परिभाषित करना है :

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

मैं वास्तव में पथ में संलग्न करने के लिए एक तरह से समझ नहीं सका launchd.conf

मैं इस पद्धति के बारे में थोड़ा चिंतित हूं, लेकिन अभी तक यह एकमात्र ऐसी चीज है जो काम करती है। क्या कोई बेहतर तरीका है?



2
Yosemite के लिए और बाद में, stackoverflow.com/questions/25385934/…
thSoft

यहां कोई भी उत्तर ओपी के प्रश्न को संबोधित नहीं करता है। लेकिन thSoft द्वारा यहाँ टिप्पणी पैसे पर सही है! हो सकता है कि यह विलय या उस संदर्भित प्रश्न से जुड़ा होना चाहिए: stackoverflow.com/questions/25385934/…
केविन बुक्स

जवाबों:


71

पामर की GUI जानकारी सही है, लेकिन शेल द्वारा देखे गए पथ को संशोधित करने के लिए अधिक अनुरक्षित तरीका है। जैसे मेडिसलेव ने कहा , आप संपादित कर सकते हैं /etc/paths, लेकिन इससे भी बेहतर है कि आप एक पाठ फ़ाइल को /etc/paths.d/इसमें छोड़ सकते हैं , इसमें एक पथ है और सभी गोले सही ढंग से पथ का निर्माण करेंगे।

उदाहरण के लिए, मेरे सिस्टम पर:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
अच्छा धन्यवाद! नोट: इसके लिए आपको लॉग आउट करने और काम करने से पहले वापस लॉग इन करना होगा।
वेरोनिका

@ द्वारिका: मैंने पाया कि इसे छोड़ना और फिर से लॉन्च करना पर्याप्त था X11(पूरी तरह से लॉग आउट करने की तुलना में कम दर्दनाक)। मैंने इसमें कोशिश नहीं की Terminal
पीटर फुक

मैं टर्मिनल की बात कर रहा था - आप सही हैं, मैं निर्दिष्ट करना भूल गया।
वेरोनिका

8
यह जानना अच्छा है, लेकिन यह ओपी के सवाल का जवाब नहीं देता है कि यह तंत्र जीयूआई ऐप पर लागू नहीं होता है। ओपी एक एकीकृत समाधान की तलाश कर रहा था जो उसे डिफ़ॉल्ट में संलग्न करने की अनुमति देता है $PATH
mklement

आप यहाँ "मेरे सिस्टम" से क्या मतलब है, @cogg? क्या हम सब यहाँ OS X का उपयोग नहीं कर रहे हैं? क्षमा करें, लेकिन मैं अभी भी OS X में नया हूँ। मैं OS X 10.7 का उपयोग कर रहा हूँ
ericn

48

/etc/launchd.conf

launchd.confफ़ाइल है ** केवल पूर्ण समाधान है कि दोनों आदेश पंक्ति और जीयूआई अनुप्रयोगों के लिए काम करेंगे ओएस एक्स v10.8 (माउंटेन शेर) और v10.9 सभी उपयोगकर्ताओं के लिए, (मावेरिक्स), एक है कि जीयूआई और सांत्वना अनुप्रयोगों के साथ काम करेंगे ।

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

जोड़ना

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

ऊपर के उदाहरण में मैंने /usr/local/binPATH के लिए डिफ़ॉल्ट पर्यावरण मानों को जोड़ा ।

ध्यान रखें कि यह फ़ाइल एक स्क्रिप्ट नहीं है और आपके पास प्रतिस्थापन का उपयोग करने का विकल्प नहीं है। इसके अलावा, इन्हें लागू करने के लिए आपको रिबूट करने की आवश्यकता है।

याद रखें, अन्य सभी केवल आंशिक समाधान हैं:

  • environment.plist स्पॉटलाइट के माध्यम से लॉन्च किए गए एप्लिकेशन के लिए काम नहीं करता है।
  • /etc/paths - केवल कंसोल के लिए
  • /etc/csh.cshrcया /etc/bashrc- केवल कुछ गोले के लिए

यह उत्तर मैक ओएस एक्स पर पर्यावरण चर की स्थापना से एक ही सवाल पर आधारित है ।


7
महान खोज है, लेकिन सवाल पहले से ही बारे में बात करती launchd और कैसे करने के लिए पर पूछ रहा है संलग्न उस में पथ के लिए।
cregox

21
क्या आपने वास्तव में खुद को "असली जवाब" के रूप में इंगित करने वाले मूल प्रश्न के लिए एक टिप्पणी जोड़ दी?
टीजे लुओमा

7
यह आपके द्वारा मददगार - उत्तर से निहित है, लेकिन बस इसे समझने के लिए: डिफ़ॉल्ट पथ में संलग्न होने की ओपी की इच्छा का समर्थन नहीं किया जाता है, क्योंकि आप अन्य पर्यावरण चर का संदर्भ नहीं दे सकते हैं /etc/launchd.conf
mklement

यह वैश्विक नहीं है - कमांड लाइन का वातावरण इसे तब त्याग देगा जब / etc / प्रोफाइल path_helper को कॉल करता है और / etc / पथ और /etc/paths.d/ से PATH को फिर से लिखता है
डेव X

1
Apple.stackexchange.com/questions/106355/… के अनुसार , यह योसमाइट या बाद के लिए कोई लंबे समय तक काम नहीं करता है
बजे

7

आप इसे शेल-बाय-शेल आधार पर सेट करने जा रहे हैं; बैश और csh जैसे गोले PATH को समायोजित करने के लिए समान कॉन्फ़िगरेशन फ़ाइलों और सिंटैक्स को साझा नहीं करते हैं।

ऐसा करने की कोशिश करने से launchctlकाम नहीं चलेगा, क्योंकि पर्यावरण चर लॉगिन पर सेट होते हैं; वे शेल सत्र के बाहर यूनिक्स में सिस्टम में मौजूद नहीं हैं।

तो आप जोड़ना चाहते हैं

setenv PATH "$PATH:/add/my/extra/path"

को /etc/csh.cshrcऔर

export PATH="$PATH:/more/paths:/

को /etc/bashrc

यदि आप GUI अनुप्रयोगों में पर्यावरण चर चाहते हैं, तो यह अधिक जटिल है। आपको .MacOSX/environment.plistप्रत्येक उपयोगकर्ता के घर निर्देशिका में एक फ़ाइल बनानी होगी । .MacOSXनिर्देशिका संभावना डिफ़ॉल्ट रूप से मौजूद नहीं है, इसलिए आप इसे बनाना होगा।

फ़ाइल का प्रारूप इस प्रकार है:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

अधिक environment.plist एप्पल की साइट पर है


लेकिन /etc/launchd.conf ... Hmmm ... / me में उलझन होने पर सेटिंग प्रभावी हो जाती है।
Xerxes

वास्तव में? आप वहां किस पर्यावरण चर को स्थापित कर रहे हैं?
पामर

1
बस ओएस एक्स 10.8 के रूप में एक अपडेट: ~/.MacOSX/environment.plistदृष्टिकोण अब समर्थित नहीं है और उपयोगकर्ता स्तर पर कोई विकल्प नहीं है। सिस्टम-वाइड आप उपयोग कर सकते हैं /etc/launchd.conf(और एक प्रति - *। ऐप समाधान)।
mklement

ओपी के सवालों का जवाब नहीं देता।
केविन बुक्स

3

आप /etc/pathsप्रति पंक्ति एक पथ को जोड़कर अपने वैश्विक पथ को संपादित कर सकते हैं ।

sudo nano /etc/paths आपको वहां पहुंचना चाहिए।


2
यह जानना अच्छा है, लेकिन यह ओपी के सवाल का जवाब नहीं देता है कि यह तंत्र जीयूआई ऐप्स पर लागू नहीं होता है।
mklement


1

मुझे यकीन नहीं है कि किसी ने भी सबसे सरल और सुरुचिपूर्ण तरीके से कवर किया है । कम से कम मैक ओएस एक्स v10.6 (स्नो लेपर्ड) पर।

साथ खिलवाड़ [/etc/|~/.]की [profile|bashrc]फ़ाइलों काम कर सकते हैं, लेकिन यह एक हैक की कुछ हद तक है। /etc/paths.d/निर्देशिका जाने का रास्ता है:

  • अपने पसंदीदा संपादक में सूडो।
  • प्रति लाइन एक पथ के साथ नाम से एक नई फ़ाइल बनाएं *name*(बस इसे पहले से ही वहां मौजूद कुछ नाम न दें) /etc/paths.d/:

    /usr/X11/bin
    /Developer/usr/bin
    
  • फिर जोड़िए

    eval '/usr/libexec/path_helper -s`
    

    करने के लिए profileया bashrc, और आप अच्छा होना चाहिए जाने के लिए।


1
यह जानना अच्छा है, लेकिन यह ओपी के सवाल का जवाब नहीं देता है कि यह तंत्र जीयूआई ऐप्स पर लागू नहीं होता है।
mklement

फ़ाइल का नाम शाब्दिक है *name*? या आप बस मतलब है name?
पीटर मोर्टेंसन

0

मुझे यकीन नहीं है कि लॉन्चड यह स्वीकार करता है, लेकिन कोशिश करें:

सेटेन पेट "$ पथ: / मेरा / पथ"

1
दुर्भाग्य से यह काम नहीं करता है। ऐसा नहीं लग रहा है कि लॉन्चवेट में पर्यावरण चर का उपयोग आसान है। पर्यावरण चर प्राप्त करने के लिए एक कमांड है, लेकिन इसका उपयोग करने के तरीके के बारे में बिल्कुल कोई दस्तावेज नहीं है।
लाजोस

0

मुझे यकीन नहीं है कि आप /etc/launchd.confविरोध के रूप में क्यों उपयोग करेंगे /etc/profile- लेकिन मैं मैक ओएस एक्स में कोई विशेषज्ञ नहीं हूं - मेरा मानना ​​है कि मुझे यकीन है कि यह काम करता है, लेकिन launchdमैक ओएस एक्स कार्यान्वयन / initमैक ओएस के लिए प्रतिस्थापन है X मुझे भ्रमित करता है।

वैसे भी, setenv PATH "$PATH:/more/paths:/and/more/paths"काम करेगा (tcsh), और बोर्न शेल समतुल्य है export PATH="$PATH:/more/paths:/and/more/paths"- मुझे नहीं पता कि launchdकिसी विशेष शेल से संबंधित कैसे है।

मुझे लगता है कि मैंने और प्रश्न पूछे हैं तो मैंने उत्तर दिया है =)


4
/ etc / प्रोफ़ाइल पथ सेटिंग OS X GUI ऐप्स में से किसी के द्वारा नहीं देखी जाती हैं। यह केवल बैश पर लागू होता है। मैं चाहता हूं कि सभी एप्लिकेशन नई पथ सेटिंग प्राप्त करें।
लाजोस

1
यूनिक्स? ज़रूर, यह यूनिक्स है। मेरा मतलब है, सॉर्ट। हाँ, हमने 30 साल तक काम किया सामान तोड़ दिया, लेकिन यह अभी भी यूनिक्स है! / आह
मैट सिमंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.