Apakah mungkin untuk mengetahui file mana yang diatur / ditambahkan ke variabel lingkungan, dan urutan prioritasnya?

9

Beberapa variabel lingkungan saya ( $PATH, $MANPATHdan teman) sebagian diatur dalam file sumber yang berbeda.

Saya menemukan diri saya berharap untuk perintah atau metode untuk dengan cepat mengumpulkan bagian apa , dalam variabel lingkungan tertentu, berasal dari file apa .

Saya $ PATH, misalnya, jelas telah ditetapkan (ditambahkan ke) di .bashrc, /etc/paths, /etc/paths.d/X11... dan aku masih mencari file misterius lalu yang terlampau menciptakan definisi jalan duplikat di saya $PATH.

Butuh waktu yang baik untuk menentukan secara manual file yang berkontribusi pada variabel lingkungan. Pasti ada cara yang berguna untuk mem-bypass pekerjaan yang tidak perlu ini untuk melacak semua setter ... atau apakah saya satu-satunya yang berpikir seperti ini?

Henrik
sumber

Jawaban:

6

Biasanya PATHdisetel ke nilai awal dengan cara yang sangat bergantung pada sistem oleh program yang mencatat Anda ( pam_envadalah kontributor umum), kemudian /etc/profiledan ~/.profiledan file yang mereka sertakan melanjutkan untuk mengubah nilai itu.

Hapus perubahan apa pun PATHpada .bashrc, pengaturan lingkungan tidak termasuk dalam .bashrc: lihat Perbedaan antara .bashrc dan .bash_profile .

Pertama-tama coba masuk dalam mode teks (misalnya dengan ssh localhost), karena startup sesi jauh lebih sederhana daripada dalam mode grafis.

Letakkan set -xdi awal /etc/profiledan ~/.profile. Shell akan mencetak jejak apa yang dilakukannya pada stream kesalahan standarnya; mencari penugasan PATHdalam jejak.

Tidak ada gagasan yang diutamakan untuk penugasan variabel lingkungan: siapa pun yang memberikan kemenangan terakhir.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

PATH Anda dapat diatur di mana saja, tidak hanya di file .bashrc Anda. Kemungkinan besar sistem Anda memiliki file, /etc/profiledan / atau /etc/profile.localyang menetapkan jalur default untuk semua pengguna di sistem Anda. Perubahan atau tambahan khusus pengguna untuk itu mungkin diatur dalam .profilefile Anda jika mereka tidak di Anda .bashrc, atau Anda mungkin hanya menggunakan default pada sistem Anda.

Jika Anda ingin membuat perubahan yang hanya memengaruhi Anda, saya akan memasukkannya .profilemenggunakan formulir berikut:

export PATH=/new/directory:$PATH

dengan demikian mengedit jalur saat ini daripada menulis ulang sepenuhnya.

Bagian "INVOCATION" dari man bash(atau di sini ) menjelaskan perbedaan antara .profiledan .bashrc, dan seterusnya, dan file lain mana yang dibaca dan dalam urutan apa saat Anda masuk atau memulai sebuah shell.

luar biasa
sumber
1

Sangat tidak mungkin ada mekanisme untuk ini. Coba pikirkan berapa banyak cara untuk mengubah nilai variabel env di shell.

Anda mungkin beruntung dengan itu set -x.

alex
sumber