Apa perbedaan antara "echo $ PATH" dan / etc / paths?


10

Ketika saya echo $ PATH saya mendapatkan ini: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools.

Saya ingin menghapus beberapa jalur dari ini, tetapi ketika saya membuka file menggunakan perintah vim /etc/paths, saya mendapatkan hasil berikut:

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

Apakah file / etc / path berbeda dari variabel $ PATH?


Versi OS X yang mana? Saya tidak memilikinya /etc/paths, tetapi saya berlari 10.4.11dan hal-hal mungkin telah berubah sejak saat itu
Fox

1
Tetapi menurut jawaban pada AskDifferent , /etc/pathsdigunakan untuk menghasilkan default $PATH, yang nantinya dapat Anda modifikasi
Fox

Ini standarnya. Pada saat pengguna memulai shell mereka, itu akan diubah oleh file lain yang sumber shell, seperti ~/.bashrcatau~/.profile
Sergiy Kolodyazhnyy

Jawaban:


14

/etc/pathsadalah bagian dari apa yang digunakan untuk mengatur $PATHproses shell. Ketika Anda membuka jendela Terminal baru, itu dimulai bash, yang menjalankan beberapa skrip startup: /etc/profileDAN ~/.bash_profileATAU (jika itu tidak ada) ~/.bash_loginATAU (jika itu tidak ada juga) ~/.profile. Script ini mengatur lingkungan shell, termasuk $PATH.

Salah satu hal yang /etc/profiledilakukan adalah menjalankan /usr/libexec/path_helper, yang membaca /etc/pathsdan semua file masuk /etc/paths.d, dan menambahkan isinya $PATH. Tetapi ini hanyalah titik awal; skrip startup Anda sendiri (jika ada) dapat ditambahkan ke $PATH, edit, ganti sepenuhnya, dll.

Bagi saya sepertinya skrip startup Anda (dan / atau hal-hal yang dijalankannya) menambahkan sejumlah entri ke set dasar yang didapatnya /etc/paths. "Users / myusername / .node_modules_global / bin: /Users/mac/.node_modules_global/bin:" ditambahkan ke awal $PATH(artinya direktori tersebut akan dicari terlebih dahulu), dan ": / Users / mac / Library / Android / sdk / platform-tools: / platform-tools "ditambahkan di bagian akhir. Jika Anda ingin tahu persis apa yang menambahkannya, Anda perlu melihat skrip startup Anda.

BTW, proses pengaturan ini $PATHhanya berlaku untuk bash "login" shells. Apa pun yang dijalankan oleh bash shell akan mewarisi $PATHdarinya, jadi mungkin pada dasarnya memiliki hal yang sama. bash shell non-login mengikuti proses pengaturan yang agak berbeda. Kerang lain, dan hal-hal yang tidak dimulai dari shell sama sekali (mis. Pekerjaan cron) mungkin sama sekali berbeda $PATHs.


Perhatikan bahwa untuk shell non-login (mis. /usr/local/bin/bashSeperti yang diinstal oleh brew, tanpa -largumen), /usr/libexec/path_helpertidak digunakan, dan /usr/local/bintidak disertakan secara default di $PATH. Untuk digunakan path_helperdalam skrip atau secara interaktif, perintahnya adalah eval $(/usr/libexec/path_helper).
Kyle Strand

0

Tempat pertama yang saya cari untuk memeriksa modifikasi adalah,

~/.profile
~/.bashrc
~/.bash_profile

Jika Anda menggunakan sesuatu yang bukan Bash, periksa file konfigurasi untuk melihat apakah ada penyebutan PATH.

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.