Pertanyaan Bagaimana cara mengatur variabel lingkungan PATH global di OS X?


Saya ingin menambahkan variabel lingkungan PATH global pada OS X sehingga semua pengguna shell dan aplikasi GUI mendapatkan lingkungan PATH yang sama.

Saya tahu saya bisa menambahkan ke path dalam skrip startup shell, tetapi pengaturan tersebut tidak diwarisi oleh aplikasi GUI.

Satu-satunya cara saya temukan sejauh ini adalah untuk mendefinisikan kembali variabel lingkungan PATH di /etc/launchd.conf:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Saya tidak tahu cara untuk menambahkan PATH ke dalamnya launchd.conf.

Saya agak khawatir tentang metode ini, tetapi sejauh ini hanya ini yang berhasil. Apakah ada cara yang lebih baik?


97
2018-05-31 19:08




Lihat: stackoverflow.com/questions/347286 - rjmunro
Untuk Yosemite dan kemudian, lihat stackoverflow.com/questions/25385934/… - thSoft
Tak satu pun dari jawaban di sini menjawab pertanyaan OP. Tetapi komentar di sini oleh thSoft benar tentang uang! Mungkin ini harus digabung atau ditautkan ke pertanyaan yang direferensikan: stackoverflow.com/questions/25385934/… - Kevin Buchs


Jawaban:


informasi GUI palmer benar, tetapi ada cara yang lebih mudah dipelihara untuk memodifikasi jalur yang dilihat oleh shell. Seperti kata mediaslave, Anda dapat mengedit /etc/paths, tetapi bahkan lebih baik Anda dapat menjatuhkan file teks /etc/paths.d/ yang memiliki jalur di dalamnya dan semua cangkang akan membangun jalur dengan benar.

Misalnya, di sistem saya:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

70
2018-05-28 06:53



Terima kasih banyak! Catatan: ini mengharuskan Anda untuk keluar dan masuk kembali sebelum berfungsi. - weronika
@weronika: Saya merasa cukup untuk berhenti dan meluncurkan kembali X11 (kurang menyakitkan daripada keluar sepenuhnya). Saya tidak mencobanya Terminal. - Peter Gluck
Saya mengacu ke Terminal - Anda benar, saya lupa menyebutkannya. - weronika
Ini bagus untuk diketahui, tetapi TIDAK menjawab pertanyaan OP dalam mekanisme ini tidak berlaku untuk aplikasi GUI. OP sedang mencari a bersatu solusi yang memungkinkannya menambahkan ke default $PATH. - mklement
apa yang Anda maksud dengan "sistem saya" di sini, @cogg? Bukankah kita semua menggunakan OS X di sini? Maaf, tapi saya masih baru di OS X. Saya menggunakan OS X 10.7 - ericn


/etc/launchd.conf

Itu launchd.conf file ** adalah satu-satunya solusi lengkap yang akan bekerja untuk kedua baris perintah dan aplikasi GUI OS X v10.8 (Singa Gunung) dan v10.9 (Mavericks), yang akan bekerja dengan aplikasi GUI dan konsol, untuk semua pengguna.

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

Menambahkan

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Dalam contoh di atas, saya menambahkan /usr/local/bin ke nilai lingkungan default untuk PATH.

Perlu diingat bahwa file ini bukan skrip dan Anda tidak memiliki opsi untuk menggunakan substitusi. Juga, untuk menerapkan ini Anda perlu reboot.

Ingat, semua yang lain hanyalah sebagian solusi:

  • environment.plist tidak berfungsi untuk aplikasi yang diluncurkan melalui Spotlight.
  • /etc/paths - hanya untuk konsol
  • /etc/csh.cshrc atau /etc/bashrc - hanya untuk beberapa cangkang

Jawaban ini didasarkan pada pertanyaan yang sama dari Pengaturan variabel lingkungan pada Mac OS X.


47
2018-06-04 20:30



Temuan hebat, tetapi pertanyaannya sudah dibicarakan peluncuran dan bertanya bagaimana caranya menambahkan ke jalan di dalamnya. - cregox
Apakah Anda benar-benar menambahkan komentar ke pertanyaan asli yang menunjuk ke diri Anda sebagai "jawaban nyata"? - TJ Luoma
Ini tersirat oleh Anda - membantu - menjawab, tetapi hanya untuk mengejanya: keinginan OP untuk menambahkan ke jalur default tidak didukung, karena Anda tidak dapat mereferensikan variabel lingkungan lain di /etc/launchd.conf. - mklement
Ini bukan global - lingkungan baris perintah akan membuang ini ketika / etc / profile memanggil path_helper dan membangun kembali PATH dari / etc / paths dan /etc/paths.d/ - Dave X
Menurut apple.stackexchange.com/questions/106355/…, ini tidak akan berhasil untuk Yosemite atau nanti - ericn


Anda harus mengaturnya berdasarkan shell-by-shell; Bash dan csh-like shells tidak berbagi file konfigurasi dan sintaks yang sama untuk menyesuaikan PATH.

Mencoba melakukan ini launchctl tidak akan berfungsi, karena variabel lingkungan disetel untuk masuk; mereka tidak ada sistem yang luas di Unix di luar sesi shell.

Jadi Anda akan ingin menambahkan

setenv PATH "$PATH:/add/my/extra/path"

untuk /etc/csh.cshrc dan

export PATH="$PATH:/more/paths:/

untuk /etc/bashrc.

Jika Anda ingin variabel lingkungan dalam aplikasi GUI, itu lebih rumit. Anda harus membuat .MacOSX/environment.plist file di direktori home masing-masing pengguna. Itu .MacOSX direktori kemungkinan tidak akan ada secara default, jadi Anda harus membuatnya.

Format file seperti ini:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Lebih lanjut tentang environment.plist  ada di situs Apple.


7
2018-06-01 12:24



Tapi pengaturannya berlaku ketika diatur di /etc/launchd.conf ... Hmmm ... / saya bingung. - Xerxes
Sangat? Variabel lingkungan apa yang Anda tetapkan di sana? - palmer
Hanya pembaruan seperti pada OS X 10.8: the ~/.MacOSX/environment.plist pendekatan tidak lagi didukung dan tidak ada pengganti di tingkat pengguna. System-wide yang bisa Anda gunakan /etc/launchd.conf(dan ada solusi aplikasi per - *.). - mklement
Tidak menjawab pertanyaan OP. - Kevin Buchs


Anda dapat mengedit jalur global Anda dengan menambahkan garis ke /etc/paths, satu jalur per baris.

sudo nano /etc/paths harus membawa Anda ke sana.


3
2017-09-03 18:04



Ini bagus untuk diketahui, tetapi itu tidak menjawab pertanyaan OP bahwa mekanisme ini tidak berlaku untuk aplikasi GUI. - mklement


Apakah Anda sudah melihat halaman manual untuk path_helper utilitas baris perintah pada OS X? Saya menjawab a pertanyaan yang agak terkait pada SO yang menurut saya bermanfaat bagi Anda.


1
2018-06-01 12:50





Saya tidak yakin apakah ada yang tertutup yang paling sederhana dan kebanyakan anggun cara. Setidaknya pada Mac OS X v10.6 (Macan Tutul Salju).

Messing dengan [/etc/|~/.] dari [profile|bashrc] file dapat berfungsi, tetapi ini agak meretas. Itu /etc/paths.d/ direktori adalah cara untuk pergi:

  • Sudo menjadi editor favorit Anda.
  • Buat file baru bernama *name* (jangan sebut saja sesuatu yang sudah ada di sana) di /etc/paths.d/ dengan jalur per baris:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Kemudian tambahkan

    eval '/usr/libexec/path_helper -s`
    

    untuk profile atau bashrc, dan Anda harus pergi dengan baik.


1
2018-01-31 07:22



Ini bagus untuk diketahui, tetapi itu tidak menjawab pertanyaan OP bahwa mekanisme ini tidak berlaku untuk aplikasi GUI. - mklement
Apakah nama file secara harfiah *name*? Atau maksud Anda saja name? - Peter Mortensen


Saya tidak yakin apakah launchd menerima ini, tetapi coba:

setenv PATH "$ PATH: / my / path"

0
2018-05-31 19:26



Sayangnya itu tidak berhasil. Itu tidak terlihat seperti launchctl memiliki akses ke variabel lingkungan yang mudah. Ada perintah untuk mendapatkan variabel lingkungan, tetapi sama sekali tidak ada dokumentasi tentang cara menggunakannya. - lajos


Saya tidak yakin mengapa Anda menggunakannya /etc/launchd.conf sebagai lawan /etc/profile - tapi saya bukan ahli dalam Mac OS X - saya percaya Anda yakin saya berhasil, tapi launchd adalah implementasi / penggantian Mac OS X untuk init - Mac OS X membingungkan saya.

Bagaimanapun, setenv PATH "$PATH:/more/paths:/and/more/paths" akan bekerja (tcsh), dan ekuivalen shell tagihan adalah export PATH="$PATH:/more/paths:/and/more/paths" - Saya tidak tahu caranya launchd terkait dengan shell tertentu juga.

Saya pikir saya sudah mengajukan lebih banyak pertanyaan maka saya sudah menjawab =)


0
2018-06-01 04:10



Pengaturan / etc / profile path tidak terlihat oleh salah satu aplikasi OS X GUI. Itu hanya berlaku untuk bash. Saya ingin semua aplikasi mendapatkan pengaturan jalur baru. - lajos
Benar - terima kasih untuk membersihkan itu untuk saya :) - Xerxes
Unix? Tentu, ini unix. Maksud saya, agak. Ya, kami merusak barang-barang yang berhasil selama 30 tahun, tetapi masih unix! /mendesah - Matt Simmons