जवाबों:
इस सामग्री के साथ एक environment.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>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv PRODUCTS_PATH /Users/mortimer/Projects/my_products
launchctl setenv ANDROID_NDK_HOME /Applications/android-ndk
launchctl setenv PATH $PATH:/Applications/gradle/bin
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
आप ब्लॉक के launchctl
अंदर कई कमांड जोड़ सकते हैं <string></string>
।
plist
सिस्टम रिबूट के बाद सक्रिय कर देंगे। आप launchctl load ~/Library/LaunchAgents/environment.plist
इसे तुरंत लॉन्च करने के लिए भी उपयोग कर सकते हैं ।
[संपादित करें]
एल कैपिटन में भी यही समाधान काम करता है।
Xcode 7.0+ डिफ़ॉल्ट रूप से पर्यावरण चर का मूल्यांकन नहीं करता है। इस आदेश के साथ पुराना व्यवहार सक्षम किया जा सकता है:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[संपादित करें]
वहाँ कुछ स्थितियों में जहाँ यह काफी काम नहीं करता है। यदि कंप्यूटर को पुनरारंभ किया गया है और "लॉग इन करते समय विंडो फिर से खोलें" का चयन किया जाता है, तो फिर से खोल दी गई खिड़कियां चर नहीं देख सकती हैं (शायद वे एजेंट को चलाने से पहले खोले जाते हैं)। इसके अलावा, यदि आप ssh के माध्यम से लॉग इन करते हैं, तो चर सेट नहीं किए जाएंगे (इसलिए आपको उन्हें ~ / .bash_profile में सेट करने की आवश्यकता होगी)। अंत में, यह एल कैपिटन और सिएरा पर पेट के लिए काम नहीं करता है। इसे 'लॉन्चर कॉन्फ़िगर उपयोगकर्ता पथ ...' और / etc / पथों के माध्यम से सेट करने की आवश्यकता है।
UseSanitizedBuildSystemEnvironment
) में 9 बार दिखाई देने वाली अस्पष्ट कॉन्फ़िगरेशन सेटिंग जैसा कुछ भी नहीं है ।
[ मूल जवाब ]: आप अभी भी उपयोग कर सकते हैं launchctl setenv variablename value
एक चर ताकि द्वारा उठाया जाता है स्थापित करने के लिए सभी (चित्रमय अनुप्रयोगों, डॉक या स्पॉटलाइट के माध्यम से शुरू कर दिया टर्मिनल के माध्यम से शुरू कर दिया उन के अलावा) अनुप्रयोगों।
जाहिर है कि आप हर बार लॉगिन करते समय ऐसा नहीं करना चाहेंगे।
[ संपादित करें ]: इससे बचने के लिए, लॉन्च करें AppleScript Editor
, इस तरह एक कमांड दर्ज करें:
do shell script "launchctl setenv variablename value"
(यदि आप कई चर सेट करना चाहते हैं तो कई लाइनों का उपयोग करें)
अब फाइल फॉर्मेट: एप्लीकेशन के रूप में ( ⌘
+ s
) सेव करें । अंत में → उपयोगकर्ता और समूह → आइटम खोलें और अपना नया एप्लिकेशन जोड़ें।System Settings
[ मूल उत्तर ]: इस जगह के चारों ओर काम करने के लिए आप एक छोटे शेल स्क्रिप्ट में परिभाषित करने के लिए इच्छित सभी चर, फिर MacOS लॉगिन पर एक स्क्रिप्ट को चलाने के तरीके के बारे में इस पिछले उत्तर पर एक नज़र डालें । जब उपयोगकर्ता लॉग इन करता है तो स्क्रिप्ट को आमंत्रित किया जाएगा।
[ संपादित करें ]: न तो समाधान सही है क्योंकि चर केवल उस विशिष्ट उपयोगकर्ता के लिए निर्धारित किए जाएंगे, लेकिन मैं उम्मीद कर रहा हूं / अनुमान लगा रहा हूं कि आप सभी की आवश्यकता हो सकती है।
यदि आपके पास एक से अधिक उपयोगकर्ता हैं, तो आप उनमें से प्रत्येक के लिए मैन्युअल रूप से एक लॉगिन आइटम सेट कर सकते हैं या एक ही शेल स्क्रिप्ट की ओर इशारा करते हुए अपने प्रत्येक स्थानीय लाइब्रेरी / LaunchAgents निर्देशिका में com.user.loginscript.plist की एक प्रति रख सकते हैं ।
दी गई, दोनों में से कोई भी कार्यविधि /etc/launchd.conf जितनी सुविधाजनक नहीं है ।
[ आगे संपादित करें ]: नीचे एक उपयोगकर्ता का उल्लेख है कि यह उसके लिए काम नहीं करता था। हालाँकि मैंने कई योसेमाइट मशीनों पर परीक्षण किया है और यह मेरे लिए काम करती है। यदि आपको कोई समस्या हो रही है, तो याद रखें कि प्रभावी होने के लिए आपको अनुप्रयोगों को पुनरारंभ करना होगा। इसके अतिरिक्त अगर आप टर्मिनल में ~ / .profile या ~ / .bash_profile के माध्यम से चर सेट करते हैं, तो वे शेल से शुरू किए गए अनुप्रयोगों के लिए लॉन्चक्ट सेटेनव के माध्यम से सेट की गई चीजों को ओवरराइड करेंगे ।
मैक ओएस एक्स 10.10 योसेमाइट पर पर्यावरण चर को 3 फाइलों + 2 कमांड के साथ सेट करना संभव है।
पर्यावरण चर परिभाषा के साथ मुख्य फ़ाइल:
$ ls -la /etc/environment
-r-xr-xr-x 1 root wheel 369 Oct 21 04:42 /etc/environment
$ cat /etc/environment
#!/bin/sh
set -e
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - start"
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv MAVEN_HOME /opt/local/share/java/maven3
if [ -x /usr/libexec/path_helper ]; then
export PATH=""
eval `/usr/libexec/path_helper -s`
launchctl setenv PATH $PATH
fi
osascript -e 'tell app "Dock" to quit'
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - complete"
उपयोगकर्ता अनुप्रयोगों (टर्मिनल, आईडीई, ...) के लिए पर्यावरण चर को लोड करने की सेवा परिभाषा:
$ ls -la /Library/LaunchAgents/environment.user.plist
-rw------- 1 root wheel 504 Oct 21 04:37 /Library/LaunchAgents/environment.user.plist
$ sudo cat /Library/LaunchAgents/environment.user.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>environment.user</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
रूट उपयोगकर्ता अनुप्रयोगों के लिए समान सेवा परिभाषा:
$ ls -la /Library/LaunchDaemons/environment.plist
-rw------- 1 root wheel 499 Oct 21 04:38 /Library/LaunchDaemons/environment.plist
$ sudo cat /Library/LaunchDaemons/environment.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>environment</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
और अंत में हमें इन सेवाओं को पंजीकृत करना चाहिए:
$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist
हमें क्या मिलता है:
समस्याएँ / समस्याएँ:
सिस्टम रिबूट के बाद आपके एनवी चर को सही ढंग से अनुप्रयोगों द्वारा लिया गया था :
ऐसा ऐप्पल द्वारा लोड की गई सेवाओं के स्पष्ट आदेश से इनकार करने के कारण होता है, इसलिए env वैरिएबल "रोपेन क्वीन" के प्रसंस्करण के साथ समानांतर में पंजीकृत हैं।
लेकिन वास्तव में, मैं अपने सिस्टम को प्रति वर्ष केवल कई बार (बड़े अपडेट पर) रिबूट करता हूं, इसलिए यह कोई बड़ी बात नहीं है।
JAVA_HOME
) के लिए काम करता है , लेकिन PATH
चर के लिए नहीं ( मेरे प्रश्न को अलग से देखें )।
launchd
, लेकिन क्या उन डेमन को बूट में लोड करना संभव नहीं होगा (यानी लॉगिन से पहले)? आपको उन सभी मुद्दों को दरकिनार करना चाहिए जिनका आप उल्लेख करते हैं।
से उद्धृत किया गया
Apple Developer Relations
10-Oct-2014 09:12 PM
बहुत विचार-विमर्श के बाद, इंजीनियरिंग ने इस सुविधा को हटा दिया है।
/etc/launchd.conf
सुरक्षा कारणों से फ़ाइल को जानबूझकर हटा दिया गया था। वर्कअराउंड के रूप में, आपlaunchctl limit
बूट के दौरान रूट के रूप में जल्दी से चला सकते हैं , शायद ए सेLaunchDaemon
। (...)
उपाय:
कोड को
/Library/LaunchDaemons/com.apple.launchd.limit.plist
bash-script द्वारा डालें :
#!/bin/bash
echo '<?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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>core</string>
<string>unlimited</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>' | sudo tee /Library/LaunchDaemons/com.apple.launchd.limit.plist
/Library/LaunchDaemons
, और कमांड launchctl
चलाने के लिए कहने के बजाय limit
, इसे तर्क के setenv
साथ कमांड PATH
और एक पथ स्ट्रिंग चलाने के लिए कहें । launchd
स्टार्टअप पर इसे स्वचालित रूप से चुनना चाहिए और लगभग तुरंत स्व-संशोधित करना चाहिए।
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
यहां पुराने व्यवहार को बहाल करने के आदेश दिए गए हैं:
# create a script that calls launchctl iterating through /etc/launchd.conf
echo '#!/bin/sh
while read line || [[ -n $line ]] ; do launchctl $line ; done < /etc/launchd.conf;
' > /usr/local/bin/launchd.conf.sh
# make it executable
chmod +x /usr/local/bin/launchd.conf.sh
# launch the script at startup
echo '<?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>launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>/usr/local/bin/launchd.conf.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
' > /Library/LaunchAgents/launchd.conf.plist
अब आप setenv JAVA_HOME /Library/Java/Home
में जैसे कमांड निर्दिष्ट कर सकते हैं /etc/launchd.conf
।
एल Capitan पर जाँच की।
मेरे लिए क्या काम किया (प्रेरणा से धन्यवाद):
इसे /Library/LaunchDaemons/com.apple.launchd.limit.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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>16384</string>
<string>16384</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
यदि आपको इसकी आवश्यकता चरण दर चरण है:
⌘+v
)। यह प्रति प्रक्रिया 16384 फ़ाइलों और 16384 फ़ाइलों की कुल सीमा को बाध्य करेगाesc
तब उपयोग करना छोड़ दें:wq
मैं आशा करता हूं कि इससे आपको मदद मिली होगी।
आप https://github.com/ersiner/osx-env-sync एक कोशिश दे सकते हैं । यह एक ही स्रोत से कमांड लाइन और जीयूआई ऐप दोनों को संभालता है और ओएस एक्स (योसेमाइट) के नवीनतम संस्करण पर काम करता है ।
आप पथ प्रतिस्थापन और अन्य शेल ट्रिक का उपयोग कर सकते हैं क्योंकि आप जो लिखते हैं वह नियमित रूप से बैश स्क्रिप्ट है जो पहले स्थान पर बैश द्वारा खट्टा होना है। कोई प्रतिबंध नहीं .. ( osx-env-सिंक प्रलेखन की जांच करें और आप समझ जाएंगे कि यह कैसे प्राप्त होता है।)
मैंने यहां एक ऐसे ही सवाल का जवाब दिया, जहां आप अधिक पाएंगे।
समाधान के लिए अपने चर जोड़ने के लिए है /etc/profile
। फिर सब कुछ उम्मीद के मुताबिक काम करता है! बेशक आप इसे sudo nano / etc / profile के साथ एक रूट उपयोगकर्ता के रूप में करना चाहिए। यदि आप इसे किसी अन्य तरीके से संपादित करते हैं, तो सिस्टम क्षतिग्रस्त / आदि / प्रोफ़ाइल के साथ शिकायत करेगा, भले ही आप अनुमति को रूट में बदल दें।
मैंने निम्नलिखित तरीके से ~ / .bash_profile में चर जोड़े। आपके द्वारा पुनरारंभ किए जाने के बाद / लॉग आउट करें और लॉग इन करें
export M2_HOME=/Users/robin/softwares/apache-maven-3.2.3
export ANT_HOME=/Users/robin/softwares/apache-ant-1.9.4
launchctl setenv M2_HOME $M2_HOME
launchctl setenv ANT_HOME $ANT_HOME
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/robin/softwares/apache-maven-3.2.3/bin:/Users/robin/softwares/apache-ant-1.9.4/bin
launchctl setenv PATH $PATH
नोट: बिना पुनरारंभ / लॉग आउट और लॉग इन के आप इन परिवर्तनों का उपयोग करके आवेदन कर सकते हैं;
source ~/.bash_profile