Pembaruan: Tautan di bawah ini tidak memiliki jawaban lengkap . Harus menetapkan path atau variabel di dua tempat (satu untuk GUI dan satu untuk shell) lumpuh.
Tidak Gandakan : Mengatur variabel lingkungan di OS X?
Berasal dari latar belakang Windows di mana sangat mudah untuk mengatur dan memodifikasi variabel lingkungan (cukup buka System Properties> Advanced> Environment Variables), sepertinya tidak semudah itu di Mac OS 10.5. Sebagian besar referensi mengatakan saya harus memperbarui / etc / profile atau ~ / .profile. Apakah itu setara dengan Variabel Sistem dan Variabel Pengguna? Misalnya, di mana saya harus mengatur JAVA_HOME
variabel saya ?
EDIT:
Saya ingin dapat mengakses variabel dari terminal serta aplikasi seperti Eclipse. Juga, saya harap saya tidak perlu me-restart / logout untuk membuat ini berlaku.
sumber
Jawaban:
Tidak perlu duplikasi. Anda dapat mengatur variabel lingkungan yang digunakan oleh launchd (dan proses anak, yaitu apa pun yang Anda mulai dari Spotlight) menggunakan
launchctl setenv
.Misalnya, jika Anda ingin mencerminkan jalur Anda saat ini di launchd setelah mengaturnya di
.bashrc
atau di mana pun:Variabel lingkungan tidak diperbarui secara otomatis dalam menjalankan aplikasi. Anda perlu meluncurkan kembali aplikasi untuk mendapatkan variabel lingkungan yang diperbarui (walaupun Anda hanya dapat mengatur variabel di shell Anda, misalnya
PATH=whatever:you:want
; tidak perlu meluncurkan kembali terminal).sumber
launchctl setenv
tampaknya hanya dapat dilihat oleh pengguna yang membuat perubahan. Jika saya menetapkan variabel sebagai pengguna biasa, itu tidak terlihat untuk me-root (via sudo) dan sebaliknya.ps aux | grep launchd
akan menampilkan ini. Periksa jugaman sudo
, dokumen mana yangsudo
(secara default) dengan sengaja mengatur ulang lingkungan - jika Andasudo -E
akan melestarikan lingkungan (termasuk variabel yang telah Anda tetapkanlaunchctl setenv
). Apakah Anda memiliki aplikasi yang sebenarnya untuk ini? Jika demikian, apakah metode ini bekerja untuk Anda?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 menggunakansetenv
perintah dilaunchctl
. Secara teori , Anda harus dapat memasukkansetenv
perintah~/.launchd.conf
, danlaunchd
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 itulaunchctl
mengaturlaunchd
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 kesudo launchctl
.Hal mendasar yang perlu dipahami adalah:
launchctl
; variabel yang diperbarui kemudian diwarisi oleh semua proses baru yang diarungi sejak saat itu.Contoh pengaturan variabel lingkungan dengan launchd:
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
: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.
sumber
~/.MacOSX/environment.plist
, tentang Lion saya itu adalah membaca dan digunakan. Baru saja mengujinya. Saya sebenarnya lebih suka daripada .launchd.conf karena saya menggunakan panel preferensi RCenvironment untuk mempertahankannya.~/.launchd.conf
bekerja pada 10.6.8 - sepertinya tidak berpengaruh. Juga halaman manual mengatakan file ini saat ini tidak didukung.~/.launchd.conf
masih belum didukung dan tidak berfungsi pada OS X 10.8.3? Lihatman launchd.conf
Saya pikir apa yang dicari OP adalah solusi sederhana, seperti windows.
ini dia:
https://www.macupdate.com/app/mac/14617/rcenvironment
sumber
Anda dapat membaca di linux, yang cukup dekat dengan apa itu Mac OS X. Atau Anda dapat membaca di BSD Unix, yang sedikit lebih dekat. Sebagian besar, perbedaan antara Linux dan BSD tidak banyak berarti.
/etc/profile
adalah variabel lingkungan sistem.~/.profile
adalah variabel lingkungan khusus pengguna."Di mana saya harus mengatur variabel JAVA_HOME saya?"
/etc/profile
?Secara umum, saya lebih suka tidak mengacaukan pengaturan seluruh sistem meskipun saya satu-satunya pengguna. Saya lebih suka mengedit pengaturan lokal saya.
sumber
Untuk aplikasi GUI, Anda harus membuat dan mengedit
~/.MacOSX/environment.plist
. Lebih detail di sini . Anda harus keluar untuk menerapkannya. Saya tidak yakin apakah mereka juga mempengaruhi aplikasi yang diluncurkan dari Terminal, tetapi saya berasumsi mereka akan melakukannya.Untuk aplikasi yang diluncurkan dari Terminal, Anda juga dapat mengedit file ~ / .profile.
sumber
Cukup buka
~/.profile
file, vianano
di Terminal dan ketik di sana:Simpan file ini (cmd + X dan Y). Setelah itu silakan keluar / masuk lagi atau cukup buka tab baru di Terminal dan coba gunakan variabel baru Anda.
TOLONG JANGAN lupa menambahkan ": $ PATH" setelah apa pun / yang Anda inginkan, jika tidak, Anda akan menghapus semua jalur dalam variabel PATH, yang sudah ada sebelumnya.
sumber
Menyinkronkan variabel lingkungan OS X untuk baris perintah dan aplikasi GUI dari satu sumber dengan osx-env-sync .
Saya juga memposting jawaban untuk pertanyaan terkait di sini .
sumber
Jika Anda ingin mengubah variabel lingkungan secara permanen di macOS, atur di
/etc/paths
. Catatan , file ini hanya-baca secara default, jadi Anda harus chmod untuk izin menulis.sumber
/usr/bin/local
di file itu, bahkan tanpa memodifikasi file, itu seperti itu secara default, namun aplikasi GUI saya hanya melihat/usr/bin:/bin:/usr/sbin:/sbin
. Saya reboot berkali-kali.cat /etc/paths/
?Untuk pengguna Mac OS X Catalina 2020:
Lupakan jawaban tidak berguna lainnya, di sini hanya diperlukan dua langkah:
Buat file dengan konvensi penamaan: priority-appname. Kemudian salin dan tempel path yang ingin Anda tambahkan
PATH
.Misalnya
80-vscode
dengan konten/Applications/Visual Studio Code.app/Contents/Resources/app/bin/
dalam kasus saya.Pindahkan file itu ke
/etc/paths.d/
. Jangan lupa untuk membuka tab baru (sesi baru) di Terminal dan ketikecho $PATH
untuk memeriksa apakah jalur Anda ditambahkan!Perhatikan: metode ini hanya menambahkan jalur Anda ke
PATH
.sumber