एक ही स्रोत से दोनों कमांड लाइन और जीयूआई अनुप्रयोगों के लिए समाधान ( मैक ओएस एक्स v10.10 (योसेमाइट) और मैक ओएस एक्स v10.11 (एल कैपिटन) के साथ काम करता है )
मान लें कि आपके पास ~/.bash_profile
निम्नलिखित स्निपेट की तरह पर्यावरण चर परिभाषाएं हैं :
export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"
export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
हमें लॉन्च एजेंट चाहिए जो प्रत्येक लॉगिन पर और कभी भी मांग पर चलेगा जो इन चर को उपयोगकर्ता सत्र में लोड करने जा रहा है। हमें इन परिभाषाओं को पार्स करने और एजेंट द्वारा निष्पादित करने के लिए आवश्यक कमांड बनाने के लिए शेल स्क्रिप्ट की भी आवश्यकता होगी।
निम्नलिखित सामग्री के साथ निर्देशिका में plist
प्रत्यय (उदाहरण के लिए नाम osx-env-sync.plist
) के साथ एक फ़ाइल बनाएँ ~/Library/LaunchAgents/
:
<?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>osx-env-sync</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-l</string>
<string>-c</string>
<string>
$HOME/.osx-env-sync.sh
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
-l
पैरामीटर यहाँ महत्वपूर्ण है; यह शेल स्क्रिप्ट को एक लॉगिन शेल के साथ निष्पादित करने के लिए आवश्यक है ताकि~/.bash_profile
इस स्क्रिप्ट को निष्पादित करने से पहले इसे पहले स्थान पर रखा जाए।
अब, शेल स्क्रिप्ट। इसे ~/.osx-env-sync.sh
निम्नलिखित सामग्रियों से बनाएं :
grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
launchctl setenv ${envvar} ${!envvar}
done
सुनिश्चित करें कि शेल स्क्रिप्ट निष्पादन योग्य है:
chmod +x ~/.osx-env-sync.sh
अब, चालू सत्र के लिए लॉन्च एजेंट को लोड करें:
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist
(रे) एक जीयूआई एप्लिकेशन लॉन्च करें और सत्यापित करें कि यह पर्यावरण चर पढ़ सकता है।
सेटअप लगातार है। यह रीस्टार्ट और रीलोगिन से बचेगा।
प्रारंभिक सेटअप (जो आपने अभी-अभी किया था) के बाद, यदि आप ~/.bash_profile
अपने पूरे वातावरण में फिर से किसी भी परिवर्तन को प्रतिबिंबित करना चाहते हैं, तो launchctl load ...
आदेश को पुन: निर्देशित करें जो आप चाहते हैं वह प्रदर्शन नहीं करेगा; इसके बजाय आपको निम्नलिखित की तरह एक चेतावनी मिलेगी:
<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress
लॉगआउट / लॉगिन प्रक्रिया से गुजरे बिना अपने पर्यावरण चर को पुनः लोड करने के लिए निम्नलिखित कार्य करें:
launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist
अंत में सुनिश्चित करें कि आप अपने पहले से चल रहे एप्लिकेशन (टर्मिनल.एप्प सहित) को पुनः लोड कर उन्हें बदलावों से अवगत कराएँ।
मैंने यहाँ एक GitHub परियोजना के लिए कोड और स्पष्टीकरण को भी धकेल दिया है: osx-env-sync ।
मुझे आशा है कि यह कम से कम OS X (Yosemite & El Capitan) के नवीनतम संस्करणों के लिए अंतिम समाधान होने जा रहा है।
env "switch.1.disabled=true" open -n /Applications/Eclipse.app/
एक नए सेट सिस्टम वातावरण के साथ GUI एप्लिकेशन लॉन्च करने के लिए।