GUI अनुप्रयोगों के लिए OS X में पर्यावरण चर सेट करना


18

मैक OS X में पर्यावरण चर कैसे सेट करता है जैसे कि वे ~ / .MacOSX / environment.plist या लॉगिन हुक का उपयोग किए बिना GUI अनुप्रयोगों के लिए उपलब्ध हैं (क्योंकि ये पदावनत हैं )?


@ ersin-er स्टैकऑवरफ्लो से "कमांड लाइन और GUI ऐप के लिए एक ही स्रोत से काम करता है (Yosemite और El Capitan के साथ काम करता है)" इस प्रश्न को खोजने वाले लोगों के लिए रुचि हो सकती है।
l --marc l

जवाबों:


16

माउंटेन लायन पर /etc/pathsऔर /etc/launchd.confसंपादन में कोई प्रभाव नहीं पड़ता है!

Apple के डेवलपर फ़ोरम कहते हैं:

".App की जानकारी को बदलने के लिए।

~ / .MacOSX / environment.plist अब समर्थित नहीं है। "

इसलिए मैंने सीधे ऐप का संपादन किया Info.plist("AppName.app" पर राइट क्लिक करें (इस मामले में SourceTree) और फिर " Show package contents")

पॅकेज की विषय वास्तु दिखाओ

और एक नई कुंजी / तानाशाह जोड़ी को जोड़ा:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(देखें: Apple में LaunchServicesKeys प्रलेखन )

यहाँ छवि विवरण दर्ज करें

अब App (मेरे मामले में SourceTree) दिए गए पथ का उपयोग करता है और git 1.9.3 के साथ काम करता है :-)

पुनश्च: बेशक आपको अपने विशिष्ट पथ की जरूरतों के लिए पथ प्रविष्टि को समायोजित करना होगा।


1
धन्यवाद! यह मेरे लिए एकदम सही था। १०.११ (एल कैपिटन) पर मुझे मैथ्यू द्वारा प्रदान किए गए आदेशों को भी चलाना Info.plistपड़ा ताकि मेरे परिवर्तनों को प्रभावी होने के लिए देखा जा सके।
drewivec

8

समाधान पुराने की लॉगिन हुक की नकल करने के लिए लॉन्च एजेंटlaunchctl के साथ मिलकर, कार्यक्षमता का उपयोग करता है । की दुकान का उपयोग कर अन्य समाधानों के लिए , यह तुलना देखें । यहां उपयोग किया जाने वाला लॉन्च एजेंट / लाइब्रेरी / LaunchAgents / : में स्थित हैlaunchd

<?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>user.conf.launchd</string>
    <key>Program</key>
    <string>/Users/Shared/conflaunchd.sh</string>
    <key>ProgramArguments</key>
    <array>
        <string>~/.conf.launchd</string>
    </array>
    <key>EnableGlobbing</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
    <key>LimitLoadToSessionType</key>
    <array>
        <string>Aqua</string>
        <string>StandardIO</string>
    </array>
</dict>
</plist>

एक महत्वपूर्ण बात RunAtLoad कुंजी है ताकि लॉन्च एजेंट को सबसे कम समय में निष्पादित किया जा सके। असली काम खोल स्क्रिप्ट में किया जाता है /Users/Shared/conflaunchd.sh , जो पढ़ता है ~ / .conf.launchd और करने के लिए इसे फ़ीड launchctl:

#! /bin/bash

#filename="$1"
filename="$HOME/.conf.launchd"

if [ ! -r "$filename" ]; then
    exit
fi

eval $(/usr/libexec/path_helper -s)

while read line; do
    # skip lines that only contain whitespace or a comment
    if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi

    eval launchctl $line
done <"$filename"

exit 0

PATH को सही path_helperकरने के लिए कॉल की सूचना दें । अंत में, ~ / .conf.launchd ऐसा दिखता है

setenv PATH ~/Applications:"${PATH}"

setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:

# Locale
setenv LANG en_US.UTF-8

ये launchctlकमांड हैं, आगे की जानकारी के लिए इसका मैनपेज देखें। मेरे लिए ठीक काम करता है (मुझे यह उल्लेख करना चाहिए कि मैं अभी भी एक हिम तेंदुए का आदमी हूं), जीयूआई जैसे टेक्सस्टडियो और टीएक्सशॉप अपने स्वयं के टेक्स ट्री देख सकते हैं। जिन चीजों में सुधार किया जा सकता है:

  1. शेल स्क्रिप्ट में एक #filename="$1"है। यह आकस्मिक नहीं है, क्योंकि फ़ाइल नाम को तर्क के रूप में लॉन्च एजेंट द्वारा स्क्रिप्ट को फ़ीड किया जाना चाहिए, लेकिन यह काम नहीं करता है।

  2. जैसा कि यहां उल्लेख किया गया है (जर्मन और एक पेवल के पीछे!), स्क्रिप्ट को लॉन्च एजेंट में स्वयं डालना संभव है।

  3. मुझे यकीन नहीं है कि यह समाधान कितना सुरक्षित है, क्योंकि यह evalउपयोगकर्ता द्वारा प्रदान किए गए तार के साथ उपयोग करता है ।

  4. मुझे याद है कि इस विधि का उपयोग करने वाले MANPATH की परिभाषा अच्छी तरह से काम नहीं करती थी, लेकिन मुझे यकीन नहीं है।

यह उल्लेख किया जाना चाहिए कि Apple ने launch / launchd.conf में सामान डालकर कुछ इसी तरह के दृष्टिकोण का इरादा किया है , लेकिन वर्तमान में यह इस तारीख और OS के रूप में असमर्थित है (देखें का मेनपेज launchd.conf)। मेरा अनुमान है कि ग्लोबिंग जैसी चीजें इस प्रस्ताव में काम नहीं करेंगी। और निश्चित रूप से कोई भी इन फ़ाइलों को लॉन्च एजेंट के अलावा कहीं भी रख सकता है, जिसे / लाइब्रेरी / लॉन्चएगेंट्स / या ~ / लाइब्रेरी / लॉन्चएगेंट्स / में रहना चाहिए

अंत में, मुझे लॉन्च एजेंटों पर जानकारी के रूप में उपयोग किए गए स्रोतों का उल्लेख करना चाहिए: 1 , 2 , 3 , 4

अपडेट : यह फिलहाल 10.8 वर्जन में काम नहीं करता है। प्रति आवेदन के आधार पर वर्कअराउंड का वर्णन यहां और यहां दिया गया है


वैसे, अगर कोई टर्मिनल वातावरण में पथ-चर को परिभाषित करना चाहता है और इस लॉन्च एजेंट का उपयोग करता है, तो मैं export PATH=.:"$(launchctl getenv PATH)"~ / -bash_profile (इसी तरह अन्य गोले के लिए) में लिखने का सुझाव देता हूं । यह संभव है क्योंकि path_helperशेल स्क्रिप्ट में कहा जाता है। OS X में PATH चर पर अधिक जानकारी के लिए, इस उत्तर को जांचें ।
Percival Ulysses

3

मावेरिक पर मेरे लिए @flori द्वारा दिए गए उत्तर का काम है बशर्ते कि मैं प्लिस्ट फ़ाइल को बदलने के बाद टर्मिनल में निम्नलिखित कमांड चलाऊं

/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 

killall Finder

एल कैप्टन के साथ मेरा भी यही बर्ताव था, और मैंने @ फ्लोरी के जवाब में आपकी बात जोड़ी है
सेकी

2

@ Percival-ulysses द्वारा प्रदान किया गया उत्तर मेरे लिए 10.9 Mavericks पर निम्नलिखित छोटे परिवर्तन के साथ काम करता है: पहले / पंक्तियों को संपादित करें / संपादित करें / साझा करें / कॉन्फ़िगर करें exit 0और लाइनें जोड़ें

killall Dock
killall SystemUIServer

डॉक और मेनूबार को पुनः आरंभ करने के लिए। इसके बाद डॉक या स्पॉटलाइट से शुरू किए गए एप्लिकेशन सही PATH को इनहेरिट करेंगे। यदि आप पाथ-क्रिटिकल एप्लिकेशन शुरू करने के लिए फाइंडर का उपयोग करते हैं, तो killall Finderउसे भी जोड़ा जा सकता है।

में .bash_profileमैं लाइन का उपयोग करता हूँ

export PATH=`launchctl getenv PATH`

PATH को टर्मिनल के लिए सेट करने के लिए, PATH को उसी स्थान से नियंत्रित किया जाता है, ~ / .conf.launchd फ़ाइल।


0

एक अन्य विकल्प का उपयोग करना है /etc/launchd.conf। उदाहरण के लिए मैंने PATHइस लाइन को जोड़कर डिफ़ॉल्ट को बदल दिया है /etc/launchd.conf:

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

आप /etc/launchd.confफिर से शुरू करने, या चलाने launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confऔर समाप्त करने और फिर से शुरू करने की प्रक्रिया से परिवर्तन लागू कर सकते हैं।

/etc/launchd.confरूट लॉन्च प्रक्रिया और प्रति-उपयोगकर्ता लॉन्च प्रक्रिया दोनों में लागू होती हैं। पर्यावरण के साथ सेट चर setenvमें /etc/launchd.confदोनों से दिखाए जाते हैं sudo launchctl exportऔर launchctl export

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