Yanıtlar:
Bu içeriğe sahip bir environment.plist
dosya oluşturun ~/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>
Blok launchctl
içine birçok komut ekleyebilirsiniz <string></string>
.
plist
Sistem yeniden başlatıldıktan sonra devreye girer. launchctl load ~/Library/LaunchAgents/environment.plist
Hemen başlatmak için de kullanabilirsiniz .
[Düzenle]
Aynı çözüm El Capitan'da da işe yarıyor.
Xcode 7.0+, ortam değişkenlerini varsayılan olarak değerlendirmez. Eski davranış şu komutla etkinleştirilebilir:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[Düzenle]
Bunun pek işe yaramadığı birkaç durum var. Bilgisayar yeniden başlatılırsa ve "Oturum açarken pencereleri yeniden aç" seçilirse, yeniden açılan pencereler değişkenleri görmeyebilir (Belki de aracı çalıştırılmadan önce açılırlar). Ayrıca, ssh ile oturum açarsanız, değişkenler ayarlanmayacaktır (bu yüzden bunları ~ / .bash_profile olarak ayarlamanız gerekir). Son olarak, bu, El Capitan ve Sierra'da PATH için işe yaramıyor gibi görünüyor. Bunun 'launchctl config user path ...' ve / etc / paths ile ayarlanması gerekir.
UseSanitizedBuildSystemEnvironment
) tam olarak 9 kez görünen belirsiz bir yapılandırma ayarı gibi bir şey yok .
[ Orijinal cevap ]: Yine de tüm uygulamalar launchctl setenv variablename value
tarafından alınacak bir değişken ayarlamak için kullanabilirsiniz (terminal aracılığıyla başlatılanlara ek olarak Dock veya Spotlight üzerinden başlatılan grafik uygulamaları).
Açıkçası her giriş yaptığınızda bunu yapmak istemeyeceksiniz.
[ Düzenle ]: Bundan kaçınmak için başlatın AppleScript Editor
, şöyle bir komut girin:
do shell script "launchctl setenv variablename value"
(Birden çok değişken ayarlamak istiyorsanız birden çok satır kullanın)
Şimdi ( ⌘
+ s
) dosyasını Dosya biçimi: Uygulama olarak kaydedin . Son olarak System Settings
→ Kullanıcılar ve Gruplar → Giriş Öğeleri'ni açın ve yeni uygulamanızı ekleyin.
[ Orijinal cevap ]: Bu yerde bir kısa kabuk komut dosyasında tanımlamak istediğiniz tüm değişkenleri çözmek için, MacOS oturum açma komut dosyası çalıştırmak için önceki bu yanıta bir göz atın . Bu şekilde, kullanıcı oturum açtığında komut dosyası çağrılır.
[ Düzenle ]: Değişkenler yalnızca belirli bir kullanıcı için ayarlanacağı için çözüm de mükemmel değildir, ancak tüm ihtiyacınız olabilecekleri umuyorum / tahmin ediyorum.
Birden fazla kullanıcınız varsa, her biri için manuel olarak bir Oturum Açma Öğesi ayarlayabilir veya aynı kabuk komut dosyasını işaret ederek yerel Kütüphane / LaunchAgents dizinlerinin her birine com.user.loginscript.plist'in bir kopyasını yerleştirebilirsiniz .
Bu çözümlerin hiçbiri /etc/launchd.conf kadar uygun değildir .
[ Daha Fazla Düzenleme ]: Aşağıdaki kullanıcı bunun için işe yaramadığını belirtiyor. Ancak birden fazla Yosemite makinesinde test yaptım ve benim için çalışıyor. Bir sorun yaşıyorsanız, bunun etkili olması için uygulamaları yeniden başlatmanız gerektiğini unutmayın. Ayrıca, terminalde ~ / .profile veya ~ / .bash_profile aracılığıyla değişkenler ayarlarsanız , kabuktan başlatılan uygulamalar için launchctl setenv aracılığıyla ayarlanan şeyleri geçersiz kılarlar .
Mac OS X 10.10 Yosemite'de ortam değişkenlerini 3 dosya + 2 komutla ayarlamak mümkündür.
Ortam değişkenleri tanımı içeren ana dosya:
$ 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"
Kullanıcı uygulamaları (terminal, IDE, ...) için ortam değişkenlerini yüklemek için hizmet tanımı:
$ 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>
Kök kullanıcı uygulamaları için aynı hizmet tanımı:
$ 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>
Ve son olarak şu hizmetleri kaydetmeliyiz:
$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist
Ne elde ediyoruz:
Sorunlar / sorunlar:
Env değişkenlerinizin sistem yeniden başlatıldıktan sonra uygulamalar tarafından doğru bir şekilde alınabilmesi için ihtiyacınız olacak:
Bu, Apple'ın yüklenen hizmetlerin açık bir şekilde sıralanmasını reddetmesi nedeniyle olur, bu nedenle env değişkenleri "yeniden aç" kuyruğunun işlenmesine paralel olarak kaydedilir.
Ama aslında, sistemimi yılda sadece birkaç kez (büyük güncellemelerde) yeniden başlatıyorum, bu yüzden önemli değil.
JAVA_HOME
) için çalışır , ancak PATH
değişken için değil ( farklı sormak benim soru bakın ).
launchd
, ama bu Daemons'u (yani giriş yapmadan önce) açılışta yüklemek mümkün olmaz mıydı? Bu, bahsettiğiniz tüm sorunları atlatmalıdır.
Alıntı yapılan
Apple Developer Relations
10-Oct-2014 09:12 PM
Çok fazla müzakereden sonra, mühendislik bu özelliği kaldırmıştır.
/etc/launchd.conf
Güvenlik nedeniyle dosya bilerek kaldırılmıştır. Geçici bir çözüm olarak,launchctl limit
önyükleme sırasında belki de birLaunchDaemon
. (...)
Çözüm:
Kodu
/Library/LaunchDaemons/com.apple.launchd.limit.plist
bash-script ile girin:
#!/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
söylemek yerine , komut ve bağımsız değişken olarak bir yol dizesi çalıştırmak için söyle . başlangıçta otomatik olarak almalı ve neredeyse anında kendi kendini değiştirmelidir. launchctl
limit
setenv
PATH
launchd
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
Eski davranışı geri yüklemek için komutlar şunlardır:
# 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
Şimdi gibi komutları belirtebilirsiniz setenv JAVA_HOME /Library/Java/Home
içinde /etc/launchd.conf
.
El Capitan üzerinde kontrol etti.
Benim için ne işe yaradı (aax 'dan ilham aldım' teşekkürler):
Bunu /Library/LaunchDaemons/com.apple.launchd.limit.plist'e yapıştırın ve ardından yeniden başlatın :
<?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>
Adım adım ihtiyacınız varsa:
⌘+v
). Bu, sınırı işlem başına 16384 dosya ve toplam 16384 dosyaya zorlaresc
sonra:wq
Umarım bu sana yardımcı olmuştur.
Sen verebilir https://github.com/ersiner/osx-env-sync bir deneyin. Bu kolları hem komut satırı ve GUI uygulamaları bir gelen tek bir kaynaktan ve eserleri withe OS X en son sürümünü (Yosemite).
Yazdıklarınız ilk etapta bash tarafından kaynaklanacak düzenli bash betiği olduğundan yol ikamelerini ve diğer kabuk numaralarını kullanabilirsiniz. Kısıtlama yok .. ( osx-env-sync belgelerine bakın ve bunu nasıl başardığını anlayacaksınız.)
Burada daha fazlasını bulacağınız benzer bir soruyu yanıtladı .
Çözüm değişkeninizi eklemektir /etc/profile
. Sonra her şey beklendiği gibi çalışıyor! Tabii ki bunu sudo nano / etc / profile ile kök kullanıcı olarak yapmalısınız. Başka bir yolla düzenlerseniz, kök izinlerini değiştirseniz bile sistem hasarlı / etc / profile ile şikayet eder.
~ / .Bash_profile değişkenlerini aşağıdaki şekilde ekledim. İşiniz bittikten sonra yeniden başlatın / oturumu kapatın ve oturum açın
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
NOT: yeniden başlatma / oturum kapatma ve oturum açma olmadan bu değişiklikleri uygulayabilirsiniz;
source ~/.bash_profile