Ada beberapa tempat di mana Anda dapat mengatur variabel lingkungan.
~/.profile
: gunakan ini untuk variabel yang ingin Anda atur di semua program yang diluncurkan dari terminal (perhatikan bahwa, tidak seperti di Linux, semua shell dibuka di Terminal.app adalah shell login).
~/.bashrc
: ini dipanggil untuk shell yang bukan shell login. Gunakan ini untuk alias dan hal-hal lain yang perlu didefinisikan ulang dalam subkulit, bukan untuk variabel lingkungan yang diwariskan.
/etc/profile
: ini dimuat sebelum ~ / .profile, tetapi sebaliknya setara. Gunakan ketika Anda ingin variabel diterapkan ke program terminal yang diluncurkan oleh semua pengguna pada mesin (dengan asumsi mereka menggunakan bash).
~/.MacOSX/environment.plist
: ini dibaca oleh loginwindow saat masuk. Ini berlaku untuk semua aplikasi, termasuk yang GUI, kecuali yang diluncurkan oleh Spotlight di 10.5 (bukan 10.6). Anda harus keluar dan masuk lagi agar perubahan diterapkan. File ini tidak lagi didukung pada OS X 10.8.
launchd
contoh pengguna Anda : ini berlaku untuk semua program yang diluncurkan oleh pengguna, GUI dan CLI. Anda dapat menerapkan perubahan kapan saja dengan menggunakan setenv
perintah di launchctl
. Secara teori , Anda harus dapat memasukkan setenv
perintah ~/.launchd.conf
, dan launchd
akan membacanya secara otomatis ketika pengguna masuk, tetapi dalam praktiknya dukungan untuk file ini tidak pernah diterapkan. Sebagai gantinya, Anda dapat menggunakan mekanisme lain untuk menjalankan skrip saat masuk, dan meminta skrip itu launchctl
mengatur launchd
lingkungan.
/etc/launchd.conf
: ini dibaca oleh launchd ketika sistem dinyalakan dan ketika pengguna masuk. Mereka mempengaruhi setiap proses tunggal pada sistem, karena launchd adalah proses root. Untuk menerapkan perubahan pada menjalankan root launchd Anda dapat menyalurkan perintah ke sudo launchctl
.
Hal mendasar yang perlu dipahami adalah:
- variabel lingkungan diwarisi oleh anak-anak proses pada saat mereka bercabang dua.
- proses root adalah instance launchd, dan ada juga instance launchd terpisah per sesi pengguna.
- launchd memungkinkan Anda untuk mengubah variabel lingkungan saat ini menggunakan
launchctl
; variabel yang diperbarui kemudian diwarisi oleh semua proses baru yang diarungi sejak saat itu.
Contoh pengaturan variabel lingkungan dengan launchd:
echo setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE | launchctl
Sekarang, luncurkan aplikasi GUI Anda yang menggunakan variabel, dan voila!
Untuk mengatasi fakta yang ~/.launchd.conf
tidak berhasil, Anda dapat memasukkan skrip berikut ini ~/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>
Lalu Anda bisa memasukkan ke setenv REPLACE_WITH_VAR REPLACE_WITH_VALUE
dalam ~/.launchd.conf
, dan itu akan dieksekusi pada setiap login.
Perhatikan bahwa, ketika memiparkan daftar perintah ke launchctl dengan cara ini, Anda tidak akan dapat mengatur variabel lingkungan dengan nilai yang mengandung spasi. Jika Anda perlu untuk melakukannya, Anda dapat menghubungi launchctl sebagai berikut: launchctl setenv MYVARIABLE "QUOTE THE STRING"
.
Juga, perhatikan bahwa program lain yang berjalan saat login dapat dijalankan sebelum agen peluncuran, dan dengan demikian mungkin tidak melihat variabel lingkungan yang ditetapkannya.