Ini adalah isi dari stok ~/.profile
yang datang dengan 13.10 saya (baris komentar dihapus):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Ini diwarisi dari Debian tetapi mengapa Canonical memutuskan untuk menyimpannya? Sejauh yang saya tahu, itu bukan cara * nix standar dan saya telah melihat berbagai sistem di mana ini tidak terjadi, jadi saya berasumsi mereka pasti punya alasan yang bagus untuk itu. Hal ini dapat menyebabkan perilaku yang tidak terduga saat menjalankan shell login (seperti misalnya saat memasuki mesin misalnya) di mana pengguna tidak akan mengharapkan untuk ~/.bashrc
bersumber.
Satu-satunya keuntungan yang dapat saya pikirkan adalah untuk tidak membingungkan pengguna dengan banyak file startup dan memungkinkan mereka untuk mengedit .bashrc
sendiri dan membaca tanpa memperhatikan jenis shell. Namun, itu merupakan manfaat yang meragukan karena seringkali bermanfaat untuk memiliki pengaturan berbeda untuk login dan untuk shell interaktif dan ini menghalangi Anda untuk melakukannya. Juga, shell login sering tidak berjalan dalam lingkungan grafis dan yang dapat menyebabkan kesalahan dan peringatan dan masalah (oh my!) Tergantung pada apa yang Anda atur di file-file itu.
Jadi mengapa Ubuntu melakukan ini, apa yang saya lewatkan?
-n "$BASH_VERSION"
benar di luar bash?.profile
sumber.bashrc
, itu tidak terjadi di semua versi Linux dan saya bertanya-tanya apa alasan di balik itu.Jawaban:
Ini adalah keputusan hulu yang berasal dari Debian. Alasannya dijelaskan dalam posting wiki yang sangat bagus ini , di mana yang berikut ini adalah kutipannya. Ringkasan eksekutif adalah "untuk memastikan bahwa login GUI dan non GUI bekerja dengan cara yang sama":
sumber
Ini adalah perilaku standar Ubuntu,
~/.bashrc
adalah file start-up per-interaktif-shell tingkat pengguna. Ketika Anda membuka terminal pada dasarnya, Anda memulai non-login, shell interaktif yang membaca~/.bashrc
dan isi dari~/.bashrc
sumber dan diekspor ke lingkungan shell Anda saat ini. Ini membantu seseorang untuk mendapatkan semua variabel dan fungsi shell yang didefinisikan penggunanya di shell saat ini. Anda juga dapat menemukan garis seperti iniuntuk mendapatkan alias yang ditentukan pengguna dalam lingkungan shell saat ini.
Ini penting untuk memberikan pengalaman pengguna yang baik juga. Misalnya orang bisa menyimpan di credential proxy yang
.bashrc
, kecuali mendapatkan satupun dari aplikasi terminal bersumber ( viz ,ping
,wget
,curl
,lynx
dll) akan bekerja dengan baik. Atau Anda harus memberikan kredensial proxy setiap kali Anda membuka terminal.Selain default Ubuntu
.bashrc
berisi banyak alias yang mudah digunakan (untukls
dangrep
untuk mencetak output yang berwarna), banyak definisi baru untuk variabel shell yang berbeda yang meningkatkan pengalaman pengguna.Tetapi jika login ssh Anda , atau login di konsol virtual , Anda pada dasarnya mendapatkan shell login interaktif. Ada file inisiasi shell
~/.profile
. Karenanya, kecuali jika Anda sumber,~/.bashrc
Anda kehilangan semua pengaturan yang bermanfaat di Internet Anda.bashrc
. Itulah sebabnya~/.profile
sumber default Ubuntu~/.bashrc
Kasus yang harus dihindari
~/.profile
bentuk di dalam~/.bashrc
pada saat yang sama~/.bashrc
sedang bersumber dari~/.profile
. Ini akan membuat loop situasi tak terbatas dan sebagai akibatnya terminal prompt Anda akan ditangguhkan kecuali jika Anda menekan Ctrl+ C. Dalam situasi seperti itu jika Anda meletakkan garis di~/.bashrc
Maka Anda bisa melihat bahwa deskriptor file berhenti ketika Anda membuka terminal.
sumber
.profile
sumbernya.bashrc
? SuSe Enterprise 10 tidak melakukannya, tidak juga versi Fedora yang saya gunakan tetapi itu bertahun-tahun yang lalu, saya mungkin salah. CentOS 5.8 tidak cukup aneh. Lagi pula, Anda mengerti maksud saya? Ini adalah pilihan desain dan saya bertanya-tanya mengapa itu dibuat..bashrc
atau dalam.bash_aliases
. Sebagai contoh, saya memiliki alias untukls
sepertils --color=auto
di saya.bashrc
dan saya.bashrc
mendapat bersumber dari saya.profile
. Di sini saya dapat menggunakan alias bahkan dari ssh. Atau saya bisa menggunakan proxy di sesi ssh. Jika saya tidak mendapatkan.bashrc
dari saya.profile
saya kehilangan fitur-fitur itu. Saya pikir ini semua tentang pengalaman pengguna yang lebih baik..bashrc
perbaikan itu. Tapi itu juga menyebabkan masalah, saya ingat pertama kali saya menggunakan sistem yang memiliki perilaku ini, saya terus menerima pesan-pesan anehssh
ini karena itu saya gunakanxset b off
di saya.bashrc
yang digunakan untuk menonaktifkan bel terminal tetapi hanya dalam sistem X sehingga sedang memberikan pesan kesalahan. Butuh waktu lama bagi saya untuk mencari tahu apa yang sedang terjadi karena saya tidak berpikir itu.bashrc
akan dibaca ketika menjalankan shell login. Saya hanya ingin tahu apakah ada pernyataan "resmi" tentang ini.