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?

level0
sumber
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.

Gordon Davisson
sumber
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.

rovr138
sumber