Tek bir kaynaktan hem komut satırı hem de GUI uygulamaları için çözüm ( Mac OS Xv10.10 (Yosemite) ve Mac OS Xv10.11 (El Capitan) ile çalışır)
~/.bash_profile
Aşağıdaki snippet'te sizin gibi ortam değişkeni tanımlarına sahip olduğunuzu varsayalım :
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"
Bu değişkenleri kullanıcı oturumuna yükleyecek olan her oturum açmada ve istek üzerine her zaman çalışacak bir Başlatma Aracısına ihtiyacımız var . Bu tanımları ayrıştırmak ve aracı tarafından yürütülecek gerekli komutları oluşturmak için bir kabuk komut dosyasına da ihtiyacımız olacak.
Aşağıdaki içeriğe sahip dizinde plist
soneki (örn. Adlı osx-env-sync.plist
) bir 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>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
burada parametre kritiktir; kabuk komut dosyasını bir giriş kabuğu ile yürütmek için gereklidir, böylece ~/.bash_profile
bu komut dosyası yürütülmeden önce ilk sırada kaynaklanır.
Şimdi, kabuk betiği. ~/.osx-env-sync.sh
Aşağıdaki içeriklerle adresinde oluşturun :
grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
launchctl setenv ${envvar} ${!envvar}
done
Kabuk komut dosyasının yürütülebilir olduğundan emin olun:
chmod +x ~/.osx-env-sync.sh
Şimdi, geçerli oturum için başlatma aracısını yükleyin:
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist
(Yeniden) Bir GUI uygulaması başlatın ve ortam değişkenlerini okuyabildiğini doğrulayın.
Kurulum kalıcıdır. Yeniden başlatılır ve yeniden başlar.
İlk kurulumdan sonra (az önce yaptığınız), herhangi bir değişikliği ~/.bash_profile
ortamınıza tekrar yansıtmak istiyorsanız , launchctl load ...
komutu yeniden çalıştırmak istediğiniz şeyi gerçekleştirmez; bunun yerine aşağıdaki gibi bir uyarı alırsınız:
<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress
Oturum kapatma / oturum açma işlemine girmeden ortam değişkenlerinizi yeniden yüklemek için aşağıdakileri yapın:
launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist
Son olarak, değişikliklerin farkında olmak için zaten çalışan uygulamalarınızı (Terminal.app dahil) yeniden başlattığınızdan emin olun.
Ayrıca kod ve açıklamaları bir GitHub projesine aktardım : osx-env-sync .
Umarım bu en azından OS X'in (Yosemite ve El Capitan) en son sürümleri için nihai çözüm olacaktır.
env "switch.1.disabled=true" open -n /Applications/Eclipse.app/
GUI uygulamasını yeni bir set sistem ortamıyla başlatmak için.