it-swarm-id.com

Bagaimana cara mengatur variabel lingkungan PATH global pada OS X?

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 itu tidak diwarisi oleh aplikasi GUI.

Satu-satunya cara yang saya temukan sejauh ini adalah mendefinisikan ulang 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 di launchd.conf.

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

102
lajos

informasi GUI palmer sudah benar, tetapi ada cara yang lebih mudah untuk memodifikasi jalur yang dilihat oleh Shell. Seperti kata mediaslave , Anda dapat mengedit /etc/paths, tetapi lebih baik lagi Anda dapat menaruh file teks dalam /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
72
cogg

/etc/launchd.conf

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

Pada contoh di atas saya menambahkan /usr/local/bin ke nilai 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.cshrc atau /etc/bashrc - hanya untuk beberapa shell

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

48
sorin

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 dalam launchctl tidak akan berfungsi, karena variabel lingkungan diset pada 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"

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. .MacOSX direktori kemungkinan tidak 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.plistada di situs Apple .

7
palmer

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

Sudo nano /etc/paths harus membawamu ke sana.

3
manumoomoo

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

1
ayaz

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

Messing dengan [/etc/|~/.] dari [profile|bashrc] file mungkin berfungsi, tapi ini sedikit meretas. /etc/paths.d/ direktori adalah cara untuk pergi:

  • Sudo menjadi editor favorit Anda.
  • Buat file baru dengan nama *name* (tapi jangan beri nama itu 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`
    

    ke profile atau bashrc, dan Anda harus siap.

1
noboomu

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

Pokoknya, setenv PATH "$PATH:/more/paths:/and/more/paths" akan bekerja (tcsh), dan padanan Shell bourn adalah export PATH="$PATH:/more/paths:/and/more/paths" - Saya tidak tahu bagaimana launchd terkait dengan Shell tertentu.

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

0
Xerxes

Saya tidak yakin apakah launchd menerima ini, tetapi coba:

setenv PATH "$ PATH:/my/path"
0
user1686