GUI uygulamaları için OS X'te ortam değişkenlerini ayarlama


18

Nasıl kullanmadan GUI uygulamalar için mevcuttur, öyle ki Mac OS X'de ortam değişkenleri kadar bir dizi gelmez ~ / .MacOSX / environment.plist veya Giriş Hooks (bunlar beri edilir kaldırılmış )?


@ ersin-er StackOverflow'un "Komut satırı ve GUI uygulamaları için tek bir kaynaktan (Yosemite ve El Capitan ile çalışır) çözüm" yanıtı bu soruyu bulan kişilerin ilgisini çekebilir.
l - marc l

Yanıtlar:


16

Mountain Lion'da tüm /etc/pathsve /etc/launchd.confdüzenleme herhangi bir etki yaratmaz!

Apple'ın Geliştirici Forumları şunları söylüyor:

Msgstr ".app dosyasının Info.plist'ini, istediğiniz ortam değişkenleriyle" LSEnvironment "sözlüğünü içerecek şekilde değiştirin.

~ / .MacOSX / environment.plist artık desteklenmiyor. "

Bu yüzden doğrudan uygulamanın Info.plist("AppName.app" (bu durumda SourceTree) sağ tıklayın ve sonra " Show package contents") düzenledi

paket içeriğini göster

ve yeni bir anahtar / dikte çifti ekledi:

<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>

(bkz . Apple'da LaunchServicesKeys Belgeleri )

resim açıklamasını buraya girin

şimdi App (benim durumumda SourceTree) verilen yolu kullanır ve git 1.9.3 ile çalışır :-)

PS: Elbette Path girişini özel path ihtiyaçlarınıza göre ayarlamalısınız.


1
Teşekkür ederim! Bu benim için mükemmeldi. 10.11'de (El Capitan) , değişikliklerimin Info.plistyürürlüğe girmesini görmek için Matthew tarafından verilen komutları da çalıştırmak zorunda kaldım .
dsedivec

8

Çözüm , eski giriş kancalarını taklit etmek için launchctlbir Launch Agent ile birlikte işlevselliğini kullanır . Deposunu kullanan diğer çözümler launchdiçin bu karşılaştırmaya bakın . Burada kullanılan başlatma aracısı / Library / LaunchAgents / konumunda bulunur :

<?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>

Önemli bir şey, başlatma aracısının mümkün olan en erken zamanda yürütülmesi için RunAtLoad anahtarıdır. Gerçek çalışma kabuk komut dosyası yapılır /Users/Shared/conflaunchd.sh okur ~ / .conf.launchd ve onu besleyen 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

Çağrısına dikkat path_helperalmak için PATH doğru ayarlayın. Son olarak, ~ / .conf.launchd şöyle görünür

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

Bunlar launchctlkomutlardır, daha fazla bilgi için kılavuzuna bakınız. Benim için iyi çalışıyor (hala bir Snow Leopard adamı olduğumu belirtmeliyim), texstudio ve TeXShop gibi GUI uygulamaları kendi tex ağacımı görebilir. Geliştirilebilecek şeyler:

  1. Kabuk betiğinin içinde bir tane #filename="$1"var. Dosya adı, başlatma aracısı tarafından komut dosyasına bağımsız değişken olarak beslenmesi gerektiğinden, bu yanlışlıkla olmaz, ancak bu işe yaramaz.

  2. Belirtildiği gibi burada (Alman ve bir ödeme duvarının arkasına!), Fırlatma ajan itsself komut dosyası koymak mümkündür.

  3. evalKullanıcı tarafından sağlanan dizeleri ile kullandığından, bu çözümün ne kadar güvenli olduğundan emin değilim .

  4. Bu yöntemi kullanarak MANPATH tanımının iyi çalışmadığını hatırlıyorum, ama emin değilim.

Apple'ın ∼ / launchd.conf dosyasına bir şeyler koyarak biraz benzer bir yaklaşım tasarladığı belirtilmelidir , ancak şu anda bu tarihe ve işletim sistemine desteklenmemektedir (bkz launchd.conf. Globbing gibi şeylerin bu teklifte olduğu gibi çalışmadığını düşünüyorum. Ve elbette, bu dosyaları / Library / LaunchAgents / veya ~ / Library / LaunchAgents / dizininde bulunması gereken launch aracı dışında başka bir yere koyabilirsiniz .

Son olarak, Launch Agent'lar hakkında bilgi olarak kullandığım kaynaklardan bahsetmeliyim: 1 , 2 , 3 , 4 .

Güncelleme : Bu, şu anda 10.8 sürümünde çalışmaz. Uygulama bazında geçici çözümler burada ve burada açıklanmaktadır .


Bu arada, eğer bir Terminal ortamında PATH-Değişkenini tanımlamak istiyorsa ve bu fırlatma aracını kullanıyorsa export PATH=.:"$(launchctl getenv PATH)", ~ / .bash_profile (diğer kabuklar için benzer şekilde) yazmanızı öneririm . path_helperKabuk betiğinde çağrıldığından bu mümkündür . OS X'teki PATH değişkeni hakkında daha fazla bilgi için bu yanıtı kontrol edin .
Percival Ulysses

3

@Flori tarafından verilen cevap, plver dosyasını değiştirdikten sonra Terminal'de aşağıdaki komutları çalıştırmam şartıyla Maverick'te benim için çalışıyor

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

killall Finder

El Capitan ile aynı davranışları yaşadım ve puanınızı @ flori'nin cevabına ekledim
Seki

2

@ Percival-ulysses tarafından verilen cevap benim için şu küçük değişiklikle 10.9 Mavericks üzerinde çalışıyor: edit /Users/Shared/conflaunchd.sh betiği hemen önce exit 0ve satırları ekle

killall Dock
killall SystemUIServer

Dock'u ve menü çubuğunu yeniden başlatmak için Bundan sonra Dock'tan veya Spotlight'tan başlatılan uygulamalar doğru PATH'yi devralır. PATH açısından kritik uygulamaları başlatmak için Finder'ı kullanırsanız, o killall Finderzaman eklenebilir.

In .bash_profileben satırını kullanın

export PATH=`launchctl getenv PATH`

Terminal için PATH değerini ayarlamak için, PATH ~ / .conf.launchd dosyasından aynı yerden kontrol edilir .


0

Başka bir seçenek kullanmaktır /etc/launchd.conf. Örneğin, PATHbu satırı ekleyerek varsayılanı değiştirdim /etc/launchd.conf:

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

Değişiklikleri /etc/launchd.confyeniden başlatarak veya launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.confişlemleri çalıştırarak ve sonlandırarak ve yeniden başlatarak uygulayabilirsiniz .

/etc/launchd.confİçindeki ayarlar hem kök başlatma işlemi hem de kullanıcı başına başlatma işlemleri için geçerlidir. İle belirlenen Çevre değişkenleri setenvde /etc/launchd.confher ikisi tarafından gösterilir sudo launchctl exportve launchctl export.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.