माउंटेन लायन में, मैं एक ही स्थान पर, सभी नए लॉन्च किए गए अनुप्रयोगों के लिए पैठ पर्यावरण चर कैसे स्थापित करूं?


9

अलग-अलग पूछने पर PATHपर्यावरण चर के बारे में कई सवाल हैं और इसे शेल द्वारा लॉन्च किए गए अनुप्रयोगों के लिए कैसे सेट किया जाए, स्पॉटलाइट द्वारा या खोजक के माध्यम से (विशिष्ट प्रश्न: खोजक-लॉन्च किए गए अनुप्रयोगों के लिए पैट कैसे सेट करें या कैसे पाथ पर्यावरण चर को बदलें। .. )।

उत्तर shस्टार्टअप स्क्रिप्ट से /etc/pathsलेकर तक /etc/launchd.conf। यहां मैं मैक ओएस एक्स माउंटेन लायन 10.8.2 के तहत सभी ऐप्स के लिए एकीकृत सेटिंग के जवाब के बाद हूं PATH

जवाबों:


14

विभिन्न विकल्पों के साथ कई परीक्षणों के बाद मैं निष्कर्ष निकालता हूं:

क्या विभिन्न माध्यमों (जैसे शेल स्क्रिप्ट, फाइंडर और स्पॉटलाइट) द्वारा लॉन्च किए गए अनुप्रयोगों के लिए एक एकीकृत तरीका है PATH? ठीक है, हाँ और नहीं:

  • नहीं : PATHशेल स्टार्ट स्क्रिप्ट्स (जैसे .bashrc) में सेट करना केवल शेल द्वारा लॉन्च किए गए ऐप्स के लिए काम करता है।
  • नहीं : PATHवर्तमान launchdप्रक्रिया के लिए सेटिंग करना launchctl setenv PATH <...>मेरे लिए बिल्कुल काम नहीं करता है।
  • हां : (और सिस्टम को पुनरारंभ करने) PATHमें सेटिंग स्पॉटलाइट, डॉक और फाइंडर और बाद में (स्थानीय) गोले द्वारा शुरू किए गए अनुप्रयोगों में /etc/launchd.confउपयुक्त PATHदिखाई देगी ।
  • नहीं : दूरस्थ रूप से लगाए गए गोले पर्यावरण को विरासत में नहीं देते हैं। (देखें ... क्यों ssh के माध्यम से दूरस्थ गोले पर्यावरण को विरासत में नहीं देते हैं .. )

गोले के सेट-अप के लिए नोट्स:

  1. स्थानीय गोले में सही कामकाज के लिए इसका उपयोग बंद करना महत्वपूर्ण है /usr/libexec/path_helper, क्योंकि डिफ़ॉल्ट पथ पथों /etc/pathsके क्रम को बदल सकते हैं, PATH**

  2. दूरस्थ गोले को समायोजित करने के लिए आपको launchdखोल में पर्यावरण को फिर से आयात करने की आवश्यकता है । अपने में कुछ इस तरह का प्रयोग करें .bashrc:

# the vexatious path stuff
eval $(launchctl export)

पूरे मामले के दुर्भाग्यपूर्ण परिणाम हैं:

  • प्रति उपयोगकर्ता के आधार पर इन एकीकृत सेटिंग्स के लिए कोई रास्ता नहीं है। ( ~/.launchd.confकाम नहीं करता है।)
  • घर निर्देशिका विस्तार एट अल जैसी तकनीकों का उपयोग करके विभिन्न स्रोतों से पेट का निर्माण करने का कोई आसान तरीका नहीं है।

अपडेट: PATH के माध्यम से सेटिंग खोल के माध्यम से दूरस्थ रूप से ssh के माध्यम से लॉग इन करने के लिए काम नहीं/etc/launch.conf करता है (मुझे लगता है क्योंकि यह अपने पर्यावरण को पारित नहीं करता है जो इसे अपने माता-पिता से बच्चे के खोल में विरासत में मिला है ।)। - मैं तदनुसार उत्तर संपादित करूंगा। sshdlaunchd
हेल्लोएलो

दूरस्थ गोले के समाधान के साथ उत्तर अपडेट किया गया।
हेल्लोएलो

1
बहुत बढ़िया जवाब; इस प्रकार आप launchd पर्यावरण के स्रोतों को आसान बनाने में कर सकते हैं: eval "$(launchctl export)"
mklement0

संपादित करने का एक आसान तरीका /etc/launchd.confबस चलाना है sudo -e /etc/launchd.conf(यदि आप vi से परिचित हैं) या EDITOR=nano sudo -e /etc/launchd.conf(यदि आप एक गैर-मोडल संपादक पसंद करते हैं)।
nohillside

3

पिछले उत्तर पर विस्तार करते हुए , पथ को बदलने के लिए /etc/launchd.conf, आपको निम्नलिखित कार्य करने होंगे।

  1. सुनिश्चित करें कि आपके पास व्यवस्थापक विशेषाधिकार हैं।

  2. अपनी आवश्यकताओं को पूरा करने के लिए संशोधित, निम्नलिखित सामग्री के साथ एक नई पाठ फ़ाइल बनाएँ:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. इसे अपने घर निर्देशिका के रूप में सहेजें launchd.conf

  4. टर्मिनल खोलें। (या आपका पसंदीदा विकल्प) और टाइप करें:

    sudo mv ~/launchd.conf /etc

    sudoकमांड के आपके पिछले उपयोग के आधार पर , आपको एक छोटा "सावधान हो सकता है कि आप क्या कर रहे हैं" संदेश, लेकिन किसी भी तरह से आपको अपना पासवर्ड दर्ज करना होगा। /etcउदाहरण के लिए, TextEdit में फ़ाइल को सहेजते समय सभी कमांड डायरेक्ट्री तक फ़ाइल को ले जाते हैं , जो सीधे पहुंच योग्य नहीं है। sudo("सुपर यूजर डीओ" के लिए संक्षिप्त) का उपयोग किया जाता है क्योंकि उस निर्देशिका को लिखने के लिए प्रशासक विशेषाधिकारों की आवश्यकता होती है।

  5. कंप्यूटर को दोबारा चालू करो।

और आप सभी सेट होना चाहिए। सौभाग्य!


विवरण के लिए धन्यवाद, लेकिन यह सवाल उन तरीकों के बारे में नहीं था कि कैसे संशोधित किया जाए launchd.conf, बल्कि इसके बारे में कि कैसे सभी अनुप्रयोगों को एक ही तरीके से एक ही पैथ चर मिलता है।
हलुएलो

ठीक है, लेकिन मैंने मूल रूप से इस सवाल की खोज की कि PATHमेरे जीयूआई ऐप के लिए कैसे सेट किया जाए , और मुझे लगा कि मैं गरीब आत्माओं की मदद करूंगा, जो बदलाव को प्रभावित करने के बारे में नहीं जानते होंगे ...
MattDMo

आपके पास यहां एक वैध बिंदु है; फिर भी, मुझे लगता है कि उत्तर में आपकी जानकारी को एकीकृत करना बेहतर विकल्प है। - मुझे लगता है कि यह टिप्पणी धागा एक मेटा चर्चा बन जाता है, इसलिए मैंने इसे meta.stackoverflow पर खोला है क्योंकि अतिरिक्त उत्तर के साथ क्या करना है ...
halloleo

1
वास्तव में, यह meta.apple.stackexchange.com पर नहीं होना चाहिए था?
मट्टडामो

वास्तव में, meta.apple.stackexchange.com सही जगह होता। मुझे नहीं पता था कि यह मौजूद है ...
2

-2

आप https://github.com/ersiner/osx-env-sync एक कोशिश दे सकते हैं ।

यह एक ही सोर्स से कमांड लाइन और GUI ऐप दोनों को हैंडल करता है । और यह ओएस एक्स (योसेमाइट) के नवीनतम संस्करण के साथ काम करता है ।


जो सिर्फ दूसरे उत्तर को बिट का उपयोग करके स्वचालित करता है, जो कहता है कि वह काम नहीं करता है जैसे कि
लांचक्टल सेटेनव पेट

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

स्वीकृत समाधान launchdप्रणाली का भी उपयोग करता है। आपके समाधान में वही समस्याएं हैं जो स्वीकृत उत्तर में बताई गई हैं।
१०:१५ बजे १०:१५ बजे आधा कर

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