Ortam değişkenlerini ayarlayabileceğiniz birkaç yer vardır.
~/.profile
: terminalden başlatılan tüm programlarda ayarlamak istediğiniz değişkenler için bunu kullanın (Linux'un aksine, Terminal.app'de açılan tüm kabukların giriş kabukları olduğuna dikkat edin).
~/.bashrc
: Giriş kabukları olmayan mermiler için çağrılır. Diğer adlar ve devralınan ortam değişkenleri için değil, alt kabuklarda yeniden tanımlanması gereken diğer şeyler için kullanın.
/etc/profile
: bu ~ / .profile dosyasından önce yüklenir, aksi takdirde eşdeğerdir. Değişkenin, makinedeki tüm kullanıcılar tarafından başlatılan (bash kullandıkları varsayılarak) terminal programlarına uygulanmasını istediğinizde kullanın.
~/.MacOSX/environment.plist
: Bu girişte loginwindow tarafından okunur. Spotlight tarafından 10.5'te başlatılanlar (10.6 değil) dışında, GUI'lar da dahil olmak üzere tüm uygulamalar için geçerlidir. Değişikliklerin geçerli olması için oturumu kapatıp tekrar oturum açmanızı gerektirir. Bu dosya OS X 10.8'den itibaren desteklenmemektedir.
- kullanıcı
launchd
örneğiniz: bu kullanıcı, GUI ve CLI tarafından başlatılan tüm programlar için geçerlidir. İçindeki setenv
komutu kullanarak istediğiniz zaman değişiklikleri uygulayabilirsiniz launchctl
. Teoride , kullanıcı oturum açtığında setenv
komutları girebilmeniz ~/.launchd.conf
ve launchd
bunları otomatik olarak okuyabilmeniz gerekir, ancak pratikte bu dosya için destek asla uygulanmadı. Bunun yerine, oturum açma sırasında bir komut dosyası yürütmek için başka bir mekanizma kullanabilir launchctl
ve launchd
ortamı ayarlamak için bu komut dosyasını çağırabilirsiniz .
/etc/launchd.conf
: Bu, sistem başlatıldığında ve bir kullanıcı oturum açtığında launchd tarafından okunur. Sistemdeki her işlemi etkiler, çünkü launchd kök işlemidir. Çalışan kök fırlatma aracında değişiklik uygulamak için komutları ekleyebilirsiniz sudo launchctl
.
Anlaşılması gereken temel şeyler:
- ortam değişkenleri, bir sürecin çocukları tarafından çatallandıkları anda miras alınır.
- root işlemi bir launchd örneğidir ve kullanıcı oturumu başına ayrı bir launchd örneği de vardır.
- launchd, geçerli ortam değişkenlerini aşağıdakileri kullanarak değiştirmenize olanak tanır
launchctl
; güncellenen değişkenler daha sonra çatallandığı tüm yeni süreçler tarafından devralınır.
Launchd ile ortam değişkeni ayarlama örneği:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
Şimdi, değişkeni kullanan GUI uygulamanızı başlatın ve voila!
Çalışmayan gerçeği geçici olarak ~/.launchd.conf
çözmek için, aşağıdaki komut dosyasını içine koyabilirsiniz ~/Library/LaunchAgents/local.launchd.conf.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>local.launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>launchctl < ~/.launchd.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Sonra setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
içine koyabilirsiniz ~/.launchd.conf
ve her girişte yürütülecektir.
Bir komut listesini bu şekilde launchctl dosyasına bağlarken, boşluk içeren değerlere sahip ortam değişkenlerini ayarlayamayacağınızı unutmayın. Bunu gerekirse aşağıdaki gibi launchctl çağırabilirsiniz: launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
Ayrıca, oturum açma sırasında çalışan diğer programların lanshagenttan önce yürütülebileceğini ve bu nedenle ayarladığı ortam değişkenlerini göremeyebileceğini unutmayın.