Di Mountain Lion bagaimana saya menetapkan, di satu tempat, variabel lingkungan PATH untuk semua aplikasi yang baru diluncurkan?

9

Pada Tanya Berbeda ada banyak pertanyaan mengenai PATHvariabel lingkungan dan bagaimana mengaturnya untuk aplikasi yang diluncurkan oleh shell, dengan sorotan atau melalui finder (pertanyaan umum: Bagaimana mengatur PATH untuk aplikasi yang diluncurkan oleh Finder atau Bagaimana mengubah variabel lingkungan PATH. .. )

Jawaban berkisar dari shskrip startup untuk /etc/pathske /etc/launchd.conf. Inilah saya setelah jawaban untuk pengaturan terpaduPATH untuk semua aplikasi di bawah Mac OS X Mountain Lion 10.8.2.

halo
sumber

Jawaban:

14

Setelah banyak percobaan dengan berbagai opsi saya menyimpulkan:

Apakah ada cara terpadu untuk mengatur PATHaplikasi yang diluncurkan dengan cara berbeda (seperti skrip shell, Finder, dan Spotlight)? Ya dan tidak:

  • Tidak : Pengaturan PATHskrip start up shell (mis. .bashrc) Hanya berfungsi untuk aplikasi yang diluncurkan oleh shell.
  • Tidak : Pengaturan PATHuntuk launchdproses saat ini via launchctl setenv PATH <...>tidak berfungsi untuk saya sama sekali.
  • Ya : Pengaturan PATHdalam /etc/launchd.conf(dan memulai ulang sistem) akan membuat aplikasi yang PATHterlihat pada aplikasi diluncurkan oleh Spotlight, Dock, dan Finder dan selanjutnya shell (lokal).
  • Tidak ada : kerang jarak jauh dipanggil jangan tidak mewarisi lingkungan. (Lihat ... mengapa shell jarak jauh melalui ssh JANGAN mewarisi lingkungan .. )

Catatan untuk pemasangan kerang:

  1. Untuk memfungsikan shell lokal dengan benar, penting untuk mematikan penggunaan /usr/libexec/path_helper, karena jalur default di /etc/pathsdapat mengubah urutan jalur PATH. **

  2. Untuk mengakomodasi shell jarak jauh, Anda perlu mengimpor kembali launchdlingkungan ke shell. Gunakan sesuatu seperti ini di .bashrc:

# the vexatious path stuff
eval $(launchctl export)

Konsekuensi yang tidak menguntungkan dari keseluruhan masalah adalah:

  • Tidak ada cara untuk memiliki pengaturan terpadu ini pada basis per pengguna. ( ~/.launchd.conftidak berfungsi.)
  • Tidak ada cara mudah untuk membangun PATH dari sumber yang berbeda menggunakan teknik seperti perluasan direktori home et al.
halo
sumber
Update: Mengatur PATH via /etc/launch.conftidak tidak bekerja untuk kerang login ke jarak jauh melalui ssh (saya asumsikan karena sshdtidak lulus lingkungannya mewarisi dari induknya launchdke shell anak.). - Saya akan mengedit jawabannya.
halloleo
Jawaban diperbarui dengan solusi untuk shell jarak jauh.
halloleo
1
Jawaban bagus; Anda dapat menyederhanakan sumber dari lingkungan launchd sebagai berikut: eval "$(launchctl export)".
mklement0
Cara mudah untuk mengedit /etc/launchd.confadalah menjalankan sudo -e /etc/launchd.conf(jika Anda terbiasa dengan vi) atau EDITOR=nano sudo -e /etc/launchd.conf(jika Anda lebih suka editor non-modal).
nohillside
3

Memperluas jawaban sebelumnya , untuk mengubah jalur masuk /etc/launchd.conf, Anda harus melakukan yang berikut.

  1. Pastikan Anda memiliki hak Administrator.

  2. Buat file teks baru dengan konten berikut, dimodifikasi agar sesuai dengan kebutuhan Anda:

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. Simpan di direktori home Anda sebagai launchd.conf.

  4. Buka Terminal.app (atau pengganti favorit Anda) dan ketik:

    sudo mv ~/launchd.conf /etc

    Bergantung pada penggunaan sudoperintah sebelumnya, Anda mungkin mendapat pesan pendek "hati-hati melakukan apa yang Anda lakukan", tetapi Anda harus memasukkan kata sandi. Semua perintah yang dilakukan adalah memindahkan file ke /etcdirektori, yang tidak dapat diakses secara langsung saat menyimpan file di TextEdit, misalnya. sudo(kependekan dari "Super User DO") digunakan karena hak administrator diperlukan untuk menulis ke direktori itu.

  5. Nyalakan kembali komputer Anda.

Dan Anda harus siap. Semoga berhasil!

MattDMo
sumber
Terima kasih atas perinciannya, tetapi pertanyaannya bukan tentang cara memodifikasi launchd.conf, melainkan tentang bagaimana semua aplikasi mendapatkan variabel PATH yang sama secara terpadu.
halloleo
Benar, tapi saya awalnya mencari pertanyaan yang mencoba mencari tahu cara mengatur PATHaplikasi GUI saya, dan saya pikir saya akan membantu siapa pun jiwa miskin yang mungkin tidak tahu bagaimana melakukan perubahan ...
MattDMo
Anda memiliki poin yang valid di sini; tetap, saya pikir mengintegrasikan informasi Anda dalam jawabannya adalah pilihan yang lebih baik. - Saya pikir utas komentar ini menjadi diskusi meta, jadi saya sudah membukanya di meta.stackoverflow sebagai Apa yang harus dilakukan dengan jawaban tambahan ...
halloleo
1
sebenarnya, bukankah ini seharusnya ada di meta.apple.stackexchange.com?
MattDMo
Memang, meta.apple.stackexchange.com akan menjadi tempat yang tepat. Saya hanya tidak tahu bahwa itu ada ...
halloleo
-2

Anda dapat mencoba https://github.com/ersiner/osx-env-sync .

Ini menangani baris perintah dan aplikasi GUI dari satu sumber . Dan ini berfungsi dengan OS X (Yosemite) versi terbaru .

Ersin Er
sumber
Yang hanya mengotomatiskan jawaban lain menggunakan bit yang katanya tidak berfungsi misalnya launchctl setenv PATH <...>
user151019
@ Mark Ini tidak ada hubungannya dengan langkah-langkah otomatis jawaban di sini. Yang ini menggunakan Agen Peluncuran. Saya sarankan Anda mencobanya.
Ersin Er
Solusi yang diterima menggunakan launchdsistem juga. Solusi Anda memiliki masalah yang sama seperti yang dinyatakan dalam jawaban yang diterima.
halloleo
@halloleo Sudahkah Anda mencobanya? Dan pada versi OS X yang mana?
Ersin Er