Mengatur variabel lingkungan PATH sistem-lebar di Mavericks

41

Dalam versi OS sebelumnya seseorang dapat mengatur variabel lingkungan PATH seluruh sistem /etc/launchd.confuntuk membuatnya tersedia untuk semua aplikasi (bukan hanya baris perintah).

Di Mavericks ini tampaknya tidak lagi digunakan.

Apakah ada teknik lain untuk melakukan ini di maverick?

Tom
sumber

Jawaban:

51

Yosemite

/etc/launchd.conftidak lagi didukung pada 10.10. Lihat man launchctl:

File /etc/launchd.conf tidak lagi dikonsultasikan agar subcommand dijalankan selama waktu booting awal; fungsi ini telah dihapus karena pertimbangan keamanan.

Misalnya, Anda sekarang dapat menyimpan plist ini sebagai ~/Library/LaunchAgents/my.startup.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>my.startup</string>
  <key>ProgramArguments</key>
  <array>
    <string>sh</string>
    <string>-c</string>
    <string>launchctl setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

The launchctl setenvperintah berlari sebagai pengguna, sehingga hanya berlaku untuk proses diluncurkan di domain pengguna.

Metode ini tidak berlaku untuk aplikasi yang dibuka kembali saat login jika "Buka kembali jendela saat masuk kembali" dicentang.

Mavericks dan sebelumnya

Di 10.9 dan sebelumnya, Anda dapat menjalankan misalnya

echo setenv PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin|sudo tee -a /etc/launchd.conf

dan kemudian restart untuk menerapkan perubahan.

Metode lainnya

/etc/pathsdan /etc/paths.d/hanya berlaku (atau terutama) untuk kerang. Garis-garis di /etc/pathsdan /etc/paths.d/*ditambahkan ke jalur oleh path_helper , yang dijalankan dari /etc/profile, /etc/zshenv, dan /etc/csh.login. Saya tidak tahu program apa pun selain kerang yang akan mempertimbangkan /etc/pathsatau /etc/paths.d/.

~/.MacOSX/environment.plist berhenti bekerja di 10.8.

Lri
sumber
2
Ya; itu tidak ada secara default tetapi membuatnya dan mengatur entri yang tepat membantu
mgol
Di Yosemite, saya menemukan bahwa beberapa program sepertinya tidak melihat PYTHONPATH, yang telah saya atur di /etc/launchd.conf dan saya menggunakan perbaikan baris perintah Anda (paragraf ke-2 dalam jawaban Anda) dan sepertinya tidak berfungsi , itu hanya memberi saya pesan kesalahan / bantuan launchctl.
Tango
@ Tero saya mengedit jawabannya. /etc/launchd.conftelah dihapus pada 10.10.
Lri
Saya akan menambahkan bahwa pengalaman saya, saat bermain-main dengan bash, adalah bahwa, pada 10.10, launchctl setenv tampaknya tidak melakukan apa-apa. Saya sudah mencoba mengatur variabel env, kemudian memeriksa nilainya dengan echo dan mereka masih tidak terdefinisi.
Tango
1
@Tango Keluar dan buka kembali aplikasi terminal Anda setelah berjalan launchctl setenv. launchctl setenvtidak pernah mempengaruhi proses yang ada.
Lri
11

Ada cara yang jauh lebih mudah. Tempatkan file teks dalam folder /etc/paths.d/. Dalam file teks ini, masukkan jalur yang diinginkan DAN baris baru. Cara terbaik adalah membuat file baru untuk setiap jalur.

Di sistem saya, ada file bernama MySQL dengan teks '/ usr / local / mysql / bin' dan baris baru.

CAryaSil
sumber
Saya baru saja memposting pertanyaan baru tentang apakah ada cara untuk mengatasi kelemahan yang dijelaskan oleh @LauriRanta.
kuzzooroo
Hanya sebuah anacdote: Saya telah menggunakan metode ini juga, karena itu direkomendasikan "cara OS X." Saya belum beruntung mendapatkan Sistem untuk menghormati file PATH yang saya miliki secara konsisten di /etc/paths.d, dan biasanya berakhir dengan menggunakan perintah ekspor shell, atau menempatkan PATH saya di ~ / .bash_profile, yang selalu berfungsi, jika hanya untuk akun pengguna saya saat ini dan tidak untuk seluruh sistem. Jika file PATH di /etc/paths.d selalu bekerja untuk Anda, maka saya cemburu bahwa Sistem Anda berperilaku lebih baik daripada milik saya;)
chillin
Yang ini baru bagi saya. Bagus!
CousinCocaine
3

Anda mungkin dapat mengatur variabel lingkungan di file /etc/launchd-user.conf...

Di Mavericks, saya dapat mengonfigurasi variabel lingkungan dalam file menggunakan baris:

setenv TEST test

Setelah boot baru, $TESTdari /etc/launchd-user.conf diatur.

Edit

Mungkin sintaks file di /etc/launchd.conf tidak valid. Bisakah Anda memposting konten file itu untuk diperiksa?

Dari apa yang saya lihat, pengaturan variabel PATH di /etc/launchd.conf berfungsi normal. Namun, launchdtidak melakukan ekspansi parameter apa pun . Oleh karena itu, jika Anda memiliki entri seperti setenv PATH $PATH:/usr/local/bin, jalur yang dihasilkan akan disetel ke " $PATH:/usr/local/bin" (catatan: bukan nilai PATH, tetapi teks "$ PATH")

Eddie Kelley
sumber
Terima kasih, masalah yang saya alami adalah mengatur PATH, variabel lingkungan lain sepertinya berfungsi.
Tom
@ Tom - Saya telah memberikan saran tambahan di atas
Eddie Kelley
1
apakah ini benar-benar launch-user.conf atau launch- [current_user_name]
.conf
/etc/launchd.conf berisi 'setenv TEST test' tidak menyebar ke Terminal di Mavericks saya.
Dave X
Ups: s / Mavericks / Yosemite /.
Dave X
0

pada install Mavericks saya, menambahkan "setenv PATH blablabla" ke /etc/launchd.conf tidak berfungsi setelah reboot

jadi saya menambahkan path baru saya ke akhir / etc / paths, yang berhasil.

George Dima
sumber
Itu tidak berhasil untuk saya. Saya reboot, /etc/pathsberisi semua yang saya inginkan, namun Sublime masih melihat hanya PATH asli. Jika saya menjalankannya dari terminal, itu berfungsi.
mgol
Perintah path_helper di / etc / profile saya menggunakan / etc / paths dan /etc/paths.d untuk menimpa PATH yang mungkin telah ditetapkan oleh /etc/launchd.conf
Dave X
0

Saya menemukan bahwa setenv PATH masih berfungsi untuk saya untuk Terminal dan aplikasi, tetapi membobol skrip shell, diluncurkan langsung melalui mengklik atau Buka Dengan di Terminal dari, katakanlah, Finder. Itu sangat aneh. Variabel lingkungan lainnya diatur dalam /etc/launchd.confpekerjaan.

Untuk memperbaikinya agar skrip shell diluncurkan secara langsung, saya menduplikasi pengaturan PATH di ~/.bash_profile.

DKroot
sumber
0

Mengedit /etc/paths.datau menggunakan .bash_profiletidak berhasil untuk saya, namun seperti yang disarankan dari orang lain (saya benar-benar datang ke sini untuk mengambil jawaban, tetapi saya tidak dapat menemukannya lagi ?!), saya mengedit /etc/pathsyang berfungsi untuk saya

Dalam kasus saya, saya menambahkan android-tool adbdan androidke terminal perintah dengan menunjuk ke jalur SDK mereka ( adbtelah pindah ke direktori lain saat ini) yang terlihat seperti

/usr/local/bin
...
/Applications/adt-bundle-mac/sdk/platform-tools  //new entries
/Applications/adt-bundle-mac/sdk/tools
longi
sumber
0

MANIS, menambahkan XML itu ke ~ / Library / LaunchAgents / setenv.SVN.plist memungkinkan BBEdit untuk menggunakan binari subversi yang saya instal di / opt.

<clip>
<string>launchctl setenv PATH /opt/subversion/bin:$PATH</string>
<clip>
Markus M
sumber
1
Adakah yang tahu cara menentukan apakah file ini mendukung ekspansi parameter? Saya mungkin telah menetapkan path sehingga yang ada di / opt adalah satu-satunya. Dan saya berpikir bahwa kemungkinan TIDAK mendukung menggunakan $ PATH. Bagaimana Anda menentukan jalur yang ada untuk memulai?
Mark M
-1

Cukup tambahkan 'bin' Anda (path yang ingin Anda tambahkan) path ke file / etc / paths - reboot atau relogin !!!

sudo vi /etc/paths 
(create a file (paths file) if it does't exist, I am using 'vi' editor, you can use your own as super user )
then, add your bin directory path like below 

/usr/local/mysql/bin
/usr/local/apache-ant-1.9.3/bin
/usr/local/gradle-1.11/bin

simpan file dan login kembali ... semoga ini membantu

kode0110
sumber