Mavericks में सिस्टम चौड़ा PATH पर्यावरण चर सेट करना


41

पिछले OS संस्करणों में सिस्टम-वाइड PATH परिवेश चर /etc/launchd.confको सभी ऐप्स के लिए उपलब्ध कराने के लिए (केवल कमांड लाइन नहीं) सेट कर सकता है।

Mavericks में यह अब उपयोग नहीं किया जाता है।

Mavericks में ऐसा करने के लिए एक और तकनीक है?

जवाबों:


50

Yosemite

/etc/launchd.confअब 10.10 में समर्थित नहीं है। देखें man launchctl:

/Etc/launchd.conf फ़ाइल को अब शुरुआती बूट समय के दौरान चलने के लिए सब-कमंड के लिए परामर्श नहीं दिया जाता है; इस कार्यक्षमता को सुरक्षा कारणों से हटा दिया गया था।

अब आप इस उदाहरण को इस प्रकार बचा सकते हैं ~/Library/LaunchAgents/my.startup.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

launchctl setenvआदेश, उपयोगकर्ता के रूप में चलाए है तो यह केवल उपयोगकर्ता डोमेन में शुरू की प्रक्रियाओं के लिए लागू होता है।

यह विधि उन अनुप्रयोगों पर लागू नहीं होती है जो लॉग इन पर फिर से खोल दिए जाते हैं यदि "लॉग इन करते समय विंडो को फिर से खोलें" चेक किया गया हो।

Mavericks और पहले

10.9 और इससे पहले, आप उदाहरण के लिए चला सकते हैं

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

और फिर परिवर्तनों को लागू करने के लिए पुनः आरंभ करें।

अन्य विधियाँ

/etc/pathsऔर /etc/paths.d/केवल (या मुख्य रूप से) गोले पर लागू होते हैं। में लाइनों /etc/pathsऔर /etc/paths.d/*से पथ से जुड़ जाते हैं path_helper , जिसमें से चलाया जाता है /etc/profile, /etc/zshenvऔर /etc/csh.login। मुझे नहीं लगता कि गोले के अलावा कोई कार्यक्रम होगा जो विचार करेगा /etc/pathsया /etc/paths.d/

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


2
हां; यह केवल डिफ़ॉल्ट रूप से मौजूद नहीं है, लेकिन इसे बनाने और उचित प्रविष्टियों को सेट करने में मदद मिलती है
mgol

Yosemite पर, मैंने पाया कि कुछ प्रोग्राम PYTHONPATH को देखने के लिए प्रतीत नहीं होते हैं, जिसे मैंने /etc/launchd.conf में सेट किया है और मैंने आपकी कमांड लाइन फिक्स (आपके उत्तर में दूसरा पैराग्राफ) का उपयोग किया है और यह काम नहीं करता है। , यह सिर्फ मुझे प्रक्षेपण त्रुटि / मदद संदेश देता है।
टेंगो

@ टैंगो मैं जवाब संपादित किया। /etc/launchd.conf10.10 में हटा दिया गया था।
लैरी

मैं बैश के साथ खेलने के दौरान अपने अनुभव को जोड़ूंगा, यह है कि, 10.10 पर, लॉन्चक्टल सेटेनव कुछ भी नहीं कर रहा है। मैंने env वैरिएबल सेट करने की कोशिश की है, फिर गूंज के साथ मान की जाँच की और वे अभी भी अपरिभाषित थे।
टैंगो

1
@ टैंगो छोड़ो और दौड़ने के बाद अपने टर्मिनल एप्लिकेशन को फिर से खोलें launchctl setenvlaunchctl setenvमौजूदा प्रक्रियाओं को कभी प्रभावित नहीं किया है।
लैरी

11

बहुत आसान तरीका है। फ़ोल्डर में एक टेक्स्ट फ़ाइल रखें /etc/paths.d/। इस पाठ फ़ाइल में, वांछित पथ और एक नई पंक्ति दर्ज करें। सबसे अच्छा तरीका प्रत्येक पथ के लिए एक नई फ़ाइल बनाना है।

मेरे सिस्टम पर, टेक्स्ट के साथ MySQL नामक एक फाइल है 'usr / लोकल / mysql / बिन' और एक नई लाइन।


मैंने अभी एक नया सवाल पोस्ट किया है कि क्या @LauriRanta द्वारा बताई गई कमजोरी को दूर करने के तरीके हैं।
कुज़ूरू

बस एक anacdote: मैंने इस पद्धति का उपयोग किया है, क्योंकि यह अनुशंसित है "OS X तरीका।" मेरे पास इतना भाग्य नहीं है कि मुझे /etc/paths.d में लगातार PATH फ़ाइलों को सम्मानित करने के लिए सिस्टम मिल रहा है, और आमतौर पर या तो एक्सपोर्ट शेल कमांड का उपयोग कर रहा है, या मेरे PATH को ~ / .bash_profile में रखता है, जो हमेशा काम करता है। यदि केवल मेरे वर्तमान उपयोगकर्ता खाते के लिए और सिस्टम-वाइड नहीं है। यदि PATH /etc/paths.d में PATH फाइलें हमेशा आपके लिए काम करती हैं, तो मुझे ईर्ष्या होती है कि आपका सिस्टम मुझसे बेहतर व्यवहार करता है;)
chillin

यह मेरे लिए नया है। अच्छा!
कज़िन कोकीन

3

आप फ़ाइल में पर्यावरण चर सेट करने में सक्षम हो सकते हैं /etc/launchd-user.conf...

Mavericks में, मैं लाइन का उपयोग करके फ़ाइल में एक पर्यावरण चर को कॉन्फ़िगर करने में सक्षम था:

setenv TEST test

एक ताजा बूट के बाद, $TEST/etc/launchd-user.conf से सेट किया जाता है।

संपादित करें

यह संभव है कि /etc/launchd.conf पर फ़ाइल का सिंटैक्स अमान्य है। क्या आप परीक्षा के लिए उस फ़ाइल की सामग्री पोस्ट कर सकते हैं?

मैं जो देख रहा हूं, उसमें /etc/launchd.conf में PATH चर सेट करना सामान्य रूप से काम कर रहा है। हालाँकि, launchdकोई पैरामीटर विस्तार नहीं करता है । इसलिए, यदि आपके पास एक प्रविष्टि है setenv PATH $PATH:/usr/local/bin, तो आपका परिणामी पथ " $PATH:/usr/local/bin" पर ध्यान दिया जाएगा (ध्यान दें: PATH का मान नहीं , लेकिन पाठ "$ PATH")


धन्यवाद, मुझे जो समस्या आ रही है वह PATH को सेट कर रहा है, अन्य पर्यावरण चर काम करने लगते हैं।
टॉम

@ टॉम - मैंने ऊपर एक अतिरिक्त सुझाव दिया है
एडी केली

1
क्या यह वास्तव में लॉन्च-user.conf या लॉन्च है [[current_user_name]
.conf

/etc/launchd.conf युक्त 'सेटेनव टेस्ट टेस्ट' मेरे मावेरिक्स पर टर्मिनल में प्रचारित नहीं होता है।
डेव एक्स

ऊप्स: s / Mavericks / Yosemite /।
डेव एक्स

0

मेरे सेवरिक्स पर, /etc/launchd.conf में "setenv PATH blablabla" जोड़कर रिबूट के बाद काम नहीं किया

इसलिए मैंने / आदि / रास्तों के अंत में अपना नया पथ जोड़ा, जिसने काम किया।


यह मेरे लिए काम नहीं किया। मैंने रिबूट किया, /etc/pathsइसमें वह सब कुछ है जो मैं चाहता हूं और फिर भी उदात्त अभी भी केवल मूल पथ देखता है। अगर मैं इसे टर्मिनल से चलाता हूं, तो यह काम करता है।
मैजोल

मेरे / etc / प्रोफाइल उपयोग / etc / path / और /etc/paths.d में path_helper कमांड किसी भी PATH को अधिलेखित करने के लिए जिसे /etc/launchd.conf द्वारा निर्धारित किया जा सकता है
डेव X

0

मैंने पाया कि सेटेन पेट अब भी मेरे लिए टर्मिनल और अनुप्रयोगों के लिए काम करता है, लेकिन शेल स्क्रिप्ट में टूट गया, सीधे क्लिक के माध्यम से लॉन्च किया गया या टर्मिनल से ओपन के साथ कहना, फाइंडर। यह बहुत अजीब है। अन्य पर्यावरण चर /etc/launchd.confकाम में सेट ।

सीधे लॉन्च की गई शेल स्क्रिप्ट के लिए इसे ठीक करने के लिए, मैंने PATH सेटिंग को डुप्लिकेट किया ~/.bash_profile


0

संपादन /etc/paths.dया उपयोग .bash_profileने मेरे लिए काम नहीं किया, हालाँकि जैसा कि किसी और से सुझाव दिया गया था (मैं वास्तव में यहाँ आया था उसके जवाब को प्रस्तुत करने के लिए, लेकिन मैं इसे फिर से नहीं पा सका!), मैंने संपादित किया /etc/pathsजो मेरे लिए काम करता है।

मेरे मामले में, मैंने एंड्रॉइड-टूल adbऔर androidटर्मिनल कमांड को उनके sdk रास्तों की ओर इशारा करते हुए जोड़ा है ( adbआजकल एक और निर्देशिका में चला गया है) जो देखने में ऐसा लगता है

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools

0

SWEET, उस XML को ~ / लाइब्रेरी / LaunchAgents / setenv.SVN.plist में जोड़कर BBEdit को उन सबवर्सन बायनेरिज़ का उपयोग करने की अनुमति देता है जिन्हें मैंने / ऑप्ट में स्थापित किया था।

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>

1
किसी भी विचार कैसे निर्धारित करने के लिए कि यह फ़ाइल पैरामीटर विस्तार का समर्थन करती है? मैंने रास्ता तय किया हो सकता है इसलिए / in में से केवल एक ही है। और मैं सोच रहा हूँ कि यह $ PATH का उपयोग करने का समर्थन नहीं करता है। आप मौजूदा पथ का निर्धारण कैसे करेंगे?
मार्क एम

-1

बस अपने 'बिन' (जिस पथ को आप जोड़ना चाहते हैं) / etc / पथ फ़ाइल में जोड़ें - रिबूट या रिलगिन !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

फ़ाइल सहेजें और फिर से खोलें ... आशा है कि यह मदद करता है

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