Mengapa .profile (dan bukan .bashrc) menambahkan ~ / bin ke path?

9

Karena .bashrclebih "generik" (dalam arti yang .profilesumbernya), mengapa ~/binprosedur "memasukkan ke jalan" tidak ada di dalam .bashrc? Mengapa pengguna tidak menginginkannya di shell non-login? (Terutama saat ini, di mana shell non-login lebih umum *.)

Saya tahu saya bisa secara manual melakukan perubahan seperti itu, tetapi saya ingin tahu apakah ada alasannya.

* tidak dapat membuktikannya, tapi saya pikir itulah masalahnya.

borges
sumber

Jawaban:

13

~/.bashrcdan /etc/bash.bashrcdijalankan setiap kali bashshell interaktif dimulai.

Sebaliknya, ~/.profiledan /etc/profiledijalankan setiap kali shell login dimulai. Jadi itu tidak harus menjadi bashshell, tetapi harus menjadi shell login (dan banyak bashcontoh shell bukan shell login ).

  • Sebuah bashshell adalah shell di mana program shell yang menyediakan itu bash, daripada program lain, seperti dash.
  • Shell login adalah shell yang dimulai secara otomatis sebagai konsekuensi dari login, untuk menyediakan antarmuka pengguna (grafis atau baris perintah) untuk login. Ketika shell login keluar, login berakhir.

Oleh karena itu, menempatkan pujian yang menambahkan entri ke PATHdalam bashrcfile akan:

  1. Tidak melakukan apa-apa ketika cangkang tidak bash, yang sering terjadi. Misalnya, PATHakan tidak dimodifikasi ketika Anda berada dalam sesi login grafis. Ingat, PATHtidak hanya digunakan oleh program command-line.

  2. Tambahkan berulang-ulang di hadapan bashcangkang bersarang . Jadi, jika Anda memulai sebuah shell di dalam shell - yang sangat umum, karena berbagai alasan - maka Anda akan memiliki beberapa ~/binentri yang ditumpuk di PATH. Ini membuat PATHvariabel lingkungan sulit dibaca, dan kadang-kadang juga menurunkan kinerja.

Ini tidak diinginkan. Dengan demikian akan salah untuk meletakkan ini dalam bashrcfile; itu benar-benar milik ~/.profile. ~/.profileadalah tempat yang tepat untuk:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Shell non-login memiliki shell login (atau sesuatu yang berperilaku seperti shell login) sebagai induknya, dan mewarisi sebagian besar variabel lingkungannya, termasuk PATHdari shell login ini. Jadi, memasukkan perintah pengubah jalur ~/.profilemengharuskan Anda logout dan kembali agar efektif, tetapi juga mempengaruhi lingkungan shell non-login (serta lingkungan untuk program yang bukan shell, karena setiap program mendapatkan set variabel lingkungan sendiri - disebut "lingkungan" - diwarisi dari proses induknya).

Eliah Kagan
sumber
Saya mengerti. Tetapi keputusan ini masih tidak masuk akal bagi saya. Jika terminal terbuka sekarang hanya memuat .bashrc, maka saya tidak akan dapat melihat tempat sampah pribadi saya.
borges
@borges Jika konfigurasi default tidak bekerja dengan baik untuk Anda, Anda harus merasa bebas untuk mengubahnya. (Bagaimanapun, ini komputer Anda. Atau setidaknya akun Anda.) Tapi ini kedengarannya seperti satu kali. Yaitu, sepertinya bindirektori pribadi Anda tidak ada ketika Anda masuk, dan Anda telah membuatnya selama sesi login ini. Jika Anda keluar dan kembali, itu akan ada di Anda PATH. Karena membuat bindirektori pribadi Anda adalah sesuatu yang hanya perlu dilakukan sekali, ini adalah satu kali ketidaknyamanan.
Eliah Kagan
3

Itu karena secara tradisional variabel lingkungan hanya masuk /etc/profileatau .profile. The bashrcfile untuk hal-hal seperti alias, pengaturan yang cepat, pilihan shell dan sebagainya (yaitu hal-hal yang berhubungan langsung dengan shell).

hangat
sumber