Bagaimana cara mengatur variabel lingkungan di Mac OS X sehingga tersedia untuk aplikasi GUI tanpa menggunakan ~ / .MacOSX / environment.plist atau Login Hooks (karena ini sudah tidak digunakan lagi )?
macos
environment-variables
launchd
launchctl
Ulysses Percival
sumber
sumber
Jawaban:
Di Mountain Lion semua
/etc/paths
dan/etc/launchd.conf
pengeditan tidak berpengaruh!Forum Pengembang Apple mengatakan:
Jadi saya langsung mengedit aplikasi
Info.plist
(klik kanan pada "AppName.app" (dalam hal ini SourceTree) dan kemudian "Show package contents
")dan menambahkan pasangan kunci / dikte baru bernama:
(lihat: Dokumentasi LaunchServicesKeys di Apple )
sekarang App (dalam kasus saya SourceTree) menggunakan path yang diberikan dan bekerja dengan git 1.9.3 :-)
PS: Tentu saja Anda harus menyesuaikan entri Path dengan kebutuhan path spesifik Anda.
sumber
Info.plist
berlaku.Solusi ini menggunakan fungsionalitas
launchctl
, dikombinasikan dengan Agen Peluncuran untuk meniru kait login lama. Untuk solusi lain menggunakan store oflaunchd
, lihat perbandingan ini . Agen peluncuran yang digunakan di sini terletak di / Library / LaunchAgents / :Satu hal penting adalah kunci RunAtLoad sehingga agen peluncuran dijalankan secepat mungkin. Karya nyata yang dilakukan dalam shell naskah /Users/Shared/conflaunchd.sh , yang berbunyi ~ / .conf.launchd dan feed ke
launchctl
:Perhatikan panggilan
path_helper
untuk mengatur PATH dengan benar. Akhirnya, ~ / .conf.launchd terlihat seperti ituIni adalah
launchctl
perintah, lihat manualnya untuk informasi lebih lanjut. Bekerja dengan baik untuk saya (saya harus menyebutkan bahwa saya masih seorang pria Macan Tutul Salju), aplikasi GUI seperti texstudio dan TeXShop dapat melihat pohon tex saya sendiri. Hal-hal yang dapat diperbaiki:Script shell memiliki
#filename="$1"
di dalamnya. Ini bukan kebetulan, karena nama file harus diumpankan ke skrip oleh agen peluncuran sebagai argumen, tetapi itu tidak berhasil.Seperti yang disebutkan di sini (Jerman dan di balik paywall!), Dimungkinkan untuk menempatkan skrip di agen peluncuran itu sendiri.
Saya tidak yakin seberapa aman solusi ini, karena menggunakan
eval
string yang disediakan pengguna.Saya pikir perlu diingat bahwa definisi MANPATH menggunakan metode ini tidak berfungsi dengan baik, tapi saya tidak yakin.
Harus disebutkan bahwa Apple menginginkan pendekatan yang agak mirip dengan memasukkan hal-hal di ∼ / launchd.conf , tetapi saat ini tidak didukung untuk tanggal dan OS ini (lihat halaman manual
launchd.conf
). Saya kira hal-hal seperti globbing tidak akan berfungsi seperti yang mereka lakukan dalam proposal ini. Dan tentu saja orang dapat meletakkan file-file ini di tempat lain, kecuali agen peluncuran yang harus berada di / Library / LaunchAgents / atau ~ / Library / LaunchAgents / .Akhirnya, saya harus menyebutkan sumber yang saya gunakan sebagai informasi tentang Agen Peluncuran: 1 , 2 , 3 , 4 .
Pembaruan : Ini tidak berfungsi dalam versi 10.8 saat ini. Penanganan masalah berdasarkan aplikasi dijelaskan di sini dan di sini .
sumber
export PATH=.:"$(launchctl getenv PATH)"
di ~ / .bash_profile (sama untuk shell lainnya). Ini dimungkinkan karenapath_helper
disebut dalam skrip shell. Untuk detail lebih lanjut tentang variabel PATH di OS X, periksa jawaban ini .Jawaban yang diberikan oleh @flori bekerja untuk saya di Maverick asalkan saya menjalankan perintah berikut di Terminal setelah mengubah file plist
sumber
Jawaban yang diberikan oleh @ percival-ulysses bekerja untuk saya pada 10.9 Mavericks dengan perubahan kecil berikut: sunting / Pengguna / Berbagi / skrip / conflaunchd.sh tepat sebelum
exit 0
dan tambahkan barisuntuk me-restart Dock dan menubar. Setelah ini, aplikasi dimulai dari Dock atau dari Spotlight akan mewarisi PATH yang benar. Jika Anda menggunakan Finder untuk memulai aplikasi kritis PATH, maka
killall Finder
dapat ditambahkan juga.Dalam
.bash_profile
saya menggunakan garisuntuk mengatur PATH untuk Terminal, dengan cara ini PATH dikendalikan dari lokasi yang sama, file ~ / .conf.launchd .
sumber
Pilihan lain adalah menggunakan
/etc/launchd.conf
. Misalnya saya telah mengubah defaultPATH
dengan menambahkan baris ini ke/etc/launchd.conf
:Anda dapat menerapkan perubahan
/etc/launchd.conf
dengan memulai ulang, atau dengan menjalankanlaunchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
dan menghentikan serta meluncurkan kembali proses.Pengaturan dalam
/etc/launchd.conf
berlaku untuk proses launchd root dan proses launchd per pengguna. Variabel lingkungan yang diset dengansetenv
dalam/etc/launchd.conf
ditunjukkan oleh keduanyasudo launchctl export
danlaunchctl export
.sumber