Bagaimana cara mengatur variabel lingkungan PATH global pada OS X?


101

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

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

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

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

Saya tidak tahu cara untuk benar-benar menambahkan ke PATH launchd.conf.

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



2
Untuk Yosemite dan yang lebih baru, lihat stackoverflow.com/questions/25385934/…
thSoft

Tidak ada jawaban di sini yang menjawab pertanyaan OP. Tetapi komentar di sini oleh theSoft benar tentang uang! Mungkin ini harus digabung atau ditautkan dengan pertanyaan yang direferensikan: stackoverflow.com/questions/25385934/…
Kevin Buchs

Jawaban:


71

informasi GUI palmer sudah benar, tetapi ada cara yang lebih dapat dipelihara untuk memodifikasi lintasan yang dilihat oleh shell. Seperti kata mediaslave , Anda dapat mengedit /etc/paths, tetapi bahkan lebih baik Anda dapat memasukkan file teks /etc/paths.d/yang memiliki path di dalamnya dan semua shell akan membangun path 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

1
Terima kasih banyak! Catatan: ini mengharuskan Anda untuk keluar dan masuk kembali sebelum berfungsi.
weronika

@weronika: Saya merasa cukup untuk keluar dan meluncurkan kembali X11(tidak terlalu menyakitkan daripada keluar sepenuhnya). Saya tidak mencobanya Terminal.
Peter Gluck

Saya merujuk ke Terminal - Anda benar, saya lupa menentukan.
weronika

8
Ini bagus untuk diketahui, tetapi TIDAK menjawab pertanyaan OP karena mekanisme ini tidak berlaku untuk aplikasi GUI. OP sedang mencari solusi terpadu yang memungkinkannya untuk menambahkan ke default $PATH.
penyelesaian

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

48

/etc/launchd.conf

The launchd.conffile **-satunya solusi lengkap yang akan bekerja untuk kedua baris perintah dan GUI aplikasi pada OS X v10.8 (Mountain Lion) dan v10.9 (Mavericks), salah satu yang akan bekerja dengan GUI dan konsol aplikasi, 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

Pada contoh di atas saya menambahkan /usr/local/binnilai lingkungan default untuk PATH.

Ingatlah bahwa file ini bukan skrip dan Anda tidak memiliki opsi untuk menggunakan substitusi. Juga, untuk menerapkan ini Anda perlu me-reboot.

Ingat, semua yang lain hanya solusi parsial:

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

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


7
Temuan yang bagus, tetapi pertanyaannya sudah berbicara tentang launchd dan menanyakan cara menambahkan jalur di dalamnya.
cregox

21
Apakah Anda benar-benar menambahkan komentar pada pertanyaan awal yang menunjuk pada diri Anda sebagai "jawaban nyata"?
TJ Luoma

7
Ini tersirat oleh jawaban "membantu" Anda, tetapi hanya dengan menjabarkannya: keinginan OP untuk menambahkan ke jalur default tidak didukung, karena Anda tidak dapat merujuk variabel lingkungan lain di /etc/launchd.conf.
penyelesaian

Itu 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

1
menurut apple.stackexchange.com/questions/106355/… , ini tidak berlaku untuk Yosemite atau lebih baru
ericn

7

Anda harus mengaturnya berdasarkan shell-by-shell; Shell bash dan csh-like tidak berbagi file konfigurasi dan sintaksis yang sama untuk menyesuaikan PATH.

Mencoba melakukan ini launchctltidak akan berhasil, karena variabel lingkungan ditetapkan saat login; mereka tidak ada sistem yang luas di Unix di luar sesi shell.

Jadi, Anda ingin menambahkan

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

ke /etc/csh.cshrcdan

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

untuk /etc/bashrc.

Jika Anda ingin variabel lingkungan dalam aplikasi GUI, itu lebih rumit. Anda harus membuat .MacOSX/environment.plistfile di direktori home masing-masing pengguna. The .MacOSXdirektori kemungkinan besar tidak akan ada secara default, sehingga Anda harus menciptakannya.

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 .


Tapi pengaturannya mulai berlaku ketika diset di /etc/launchd.conf ... Hmmm ... / me bingung.
Xerxes

Benarkah? Variabel lingkungan apa yang Anda atur di sana?
Palmer

1
Hanya pembaruan pada OS X 10.8: ~/.MacOSX/environment.plistpendekatan tidak lagi didukung dan tidak ada pengganti di tingkat pengguna. Seluruh sistem dapat Anda gunakan /etc/launchd.conf(dan ada solusi per - *. Aplikasi).
penyelesaian

Tidak menjawab pertanyaan OP.
Kevin Buchs

3

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

sudo nano /etc/paths harus membawamu ke sana.


2
Ini bagus untuk diketahui, tetapi tidak menjawab pertanyaan OP karena mekanisme ini tidak berlaku untuk aplikasi GUI.
penyelesaian


1

Saya tidak yakin apakah ada yang membahas cara paling sederhana dan paling elegan . Setidaknya pada Mac OS X v10.6 (Snow Leopard).

Bermain-main dengan [/etc/|~/.]dari [profile|bashrc]file dapat bekerja, tapi itu sedikit dari hack. The /etc/paths.d/direktori adalah cara untuk pergi:

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

    /usr/X11/bin
    /Developer/usr/bin
    
  • Lalu tambahkan

    eval '/usr/libexec/path_helper -s`
    

    ke profileatau bashrc, dan Anda harus baik untuk pergi.


1
Ini bagus untuk diketahui, tetapi tidak menjawab pertanyaan OP karena mekanisme ini tidak berlaku untuk aplikasi GUI.
penyelesaian

Apakah nama file secara harfiah *name*? Atau maksud Anda adil name?
Peter Mortensen

0

Saya tidak yakin apakah launchd menerima ini, tetapi coba:

setenv PATH "$ PATH: / my / path"

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

0

Saya tidak yakin mengapa Anda akan menggunakannya /etc/launchd.confsebagai lawan /etc/profile- tapi saya bukan ahli di Mac OS X - Saya yakin Anda yakin saya bisa menggunakannya, tetapi launchdapakah 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 setara shell bourn adalah export PATH="$PATH:/more/paths:/and/more/paths"- Saya tidak tahu bagaimana launchdterkait dengan shell tertentu.

Saya pikir saya telah mengajukan lebih banyak pertanyaan kemudian saya telah menjawab =)


4
/ etc / pengaturan jalur profil tidak terlihat oleh aplikasi OS X GUI mana pun. Itu hanya berlaku untuk bash. Saya ingin semua aplikasi mendapatkan pengaturan jalur baru.
lajos

1
Unix? Tentu, ini unix. Maksudku, agak. Ya, kami memecahkan barang-barang yang bekerja selama 30 tahun, tetapi itu masih belum selesai! / sigh
Matt Simmons
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.