Di mana $ PATH diatur dalam OS X 10.6 Snow Leopard?

139

Saya mengetik echo $PATHdi baris perintah dan dapatkan

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

Saya bertanya-tanya di mana ini diatur karena .bash_loginfile saya kosong.

Saya sangat khawatir bahwa, setelah menginstal MacPorts, ia menginstal banyak sampah di /opt. Saya tidak berpikir direktori itu ada di instalasi Mac OS X normal.

Pembaruan: Terima kasih kepada jtimberman karena mengoreksi echo $PATHpernyataan saya

Andrew
sumber
5
komentar dari SMcandlish :easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat
@Sathya, Menurut saya /etc/paths.dberguna untuk skrip instalasi. Jika saya ingin skrip instalasi saya menambahkan program yang diinstal ke path, saya bisa memasukkan file /etc/paths.d. Jika saya ingin mengedit jalur secara manual, /etc/pathsadalah opsi yang lebih baik.
haydenmuhl
Saya telah membuat sebagian besar skrip berdasarkan posting ini, yang dengan cepat mencetak di mana PATH didefinisikan di sepanjang beberapa lokasi ini: gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Jawaban:

161

Ketika bashmulai membaca file-file berikut setiap kali Anda login. Untuk keperluan OS X, ini berarti setiap kali Anda membuka Terminaljendela baru .

/etc/profile
~/.bash_profile
~/.bash_login   (if .bash_profile does not exist)
~/.profile      (if .bash_login does not exist)

Saat Anda memulai shell baru dengan mengetik bashpada baris perintah, itu berbunyi.bashrc

OS X juga digunakan ~/.MacOSX/environment.plistuntuk mengatur lebih banyak variabel lingkungan, termasuk jalur jika perlu.

Akhirnya, /etc/pathsdan /etc/paths.ddibaca oleh shell juga.


/opt/local/bindll. ditambahkan ~/.tcshrcoleh MacPorts. Pastikan juga untuk melihat ~/.cshrc.

Steve Folly
sumber
5
Ternyata, ~/.MacOSX/environment.plisttidak berfungsi untuk sebagian orang. Di Ubah Jalur untuk OS X alternatif dengan menggunakan folder /etc/paths.ddijelaskan. Saya belum mengujinya.
Arjan
+1 untuk ~/.cshrc. Pergi gila mencoba mencari tahu mengapa ~/.profiletidak berhasil.
tomlogic
Saya pikir jawaban ini tidak lengkap. Saya mencoba mencari tahu di mana jalur yang keliru (tidak ada): / usr / bin / local, shell saya mengeluhkan, dan tidak ada dalam file-file itu.
Tommy
Saya pikir .bashrcsudah dibaca terlepas dari apakah Anda mengetik bashatau tidak.
Xiao Peng - ZenUML.com
48

Lihatlah file /etc/paths, yang digunakan oleh /usr/libexec/path_helper, yang digunakan oleh /etc/profile.

Untuk MacPorts, gunakan sudo /etc/paths/opt/local/bindan buka kembali jendela terminal.

Komunitas
sumber
25

Serius, Leopard memberi kami cara baru untuk menambahkan path. Cukup buat file yang berisi bagian path yang ingin Anda tambahkan, dan letakkan di /etc/paths.d

Contoh cepat melakukan ini dalam satu langkah adalah:

echo "/some/path/to/add" >> /etc/paths.d/somefilename

Jika tidak, Anda bisa langsung ke /etc/paths.d dan meletakkan file di sana secara langsung. Either way, setiap bagian jalur dalam file di direktori itu akan ditambahkan ke jalur default.

Ini juga berfungsi untuk manpath.

Berikut tautan ke detail lebih lanjut:

ars technica: bagaimana cara menambahkan sesuatu ke PATH di macan tutul salju?

Pada catatan kedua: MacPorts menempatkan semuanya ke dalam direktori opt justru karena itu tidak digunakan oleh barang-barang Apple. Dengan begitu tidak akan konflik. Panduan mereka (ditulis dengan sangat baik, BTW) memiliki penjelasan tentang mengapa menggunakan opt dan bagaimana mengubah default itu jika Anda mau.

Panduan MacPorts

leanne
sumber
Sangat keren. Sekarang kita hanya perlu mendapatkan aplikasi path dependen untuk tidak lagi mencemari file profil kita ...
Daniel Beck
Suka. Sederhana!
Andrew Hedges
komentar dari SMcandlish :I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat
Satu baris, tidak ada penambahan file dan penghapusan mudah. Suka ini. Terima kasih leanne
Ibrahim Lawal
4

Untuk menunjukkan jalur Anda, gema $ PATH.

echo $PATH

Untuk mengatur jalur Anda, edit ~/.bash_profile, bukan ~/.bash_login.

jtimberman
sumber
3

Ada juga jalan yang ditentukan oleh ssh .

Bandingkan echo $PATHdengan ssh localhost 'echo $PATH'. Karena ssh tidak membaca / etc / profile, / usr / libexec / path_helper tidak berjalan dan dengan demikian / etc / path dilewati. Sekarang coba ssh localhost 'source /etc/profile; echo $PATH'. Jalan harus lebih dekat. Perbedaan yang tersisa kemungkinan disebabkan oleh modifikasi path di .bash_profile Anda (yang juga dilewati oleh ssh) dan .bashrc (yang dibaca oleh ssh).

Jika Anda ingin jalur ssh Anda mirip dengan jalur terminal normal, Anda bisa menambahkan source /etc/profile.bashrc Anda.

Keith Bentrup
sumber
Terima kasih atas petunjuknya! Saya mencari solusi dengan ssh. svn + ssh tidak dapat menemukan perintah svnserve karena path ke svnserve ada di .profile, tetapi tidak ada di .bashrc.
KIR
2

Itu dapat didefinisikan dalam:

  • Variabel sistem - /etc/paths
  • Variabel pengguna - lihat penjelasan @Steve Folly
ericn
sumber
1

Sebenarnya itu disimpan dalam .profilefile Anda dan bukan .bash_logindan itu umum bahwa MacPorts akan menggunakan ini bukan .bash_loginfile.

Juga The /optdirektori biasanya diciptakan oleh MacPorts dan menyimpan file dalam folder ini.

ricbax
sumber
1

Mengenai dokumen untuk /usr/libexec/path_helperutilitas, komponen awal untuk $ PATH diambil dari /etc/pathsdan secara default seperti

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin

untuk OS-X Snow Leopard

AB
sumber