Apa perbedaan fungsional antara .profile .bash_profile dan .bashrc

182

Apa perbedaan fungsional antara .profile, .bash_profiledan .bashrcfile?

lollercoaster
sumber

Jawaban:

151

.bash_profiledan .bashrckhusus untuk bash, sedangkan .profiledibaca oleh banyak shell dengan tidak adanya file konfigurasi shell-spesifik mereka sendiri. ( .profiledigunakan oleh shell Bourne asli.) .bash_profileatau .profiledibaca oleh shell login, bersama dengan .bashrc; subkulit hanya baca .bashrc. (Antara kontrol kerja dan sistem windowing modern, .bashrcdengan sendirinya tidak banyak digunakan. Jika Anda menggunakan screenatau tmux, layar / windows biasanya menjalankan subkulit alih-alih shell login.)

Gagasan di balik ini adalah bahwa pengaturan satu kali dilakukan oleh .profile(atau versi khusus shell-nya), dan per-shell barang oleh .bashrc. Misalnya, Anda umumnya hanya ingin memuat variabel lingkungan sekali per sesi alih-alih membuatnya rusak setiap kali Anda meluncurkan subkulit dalam sesi, sedangkan Anda selalu ingin alias Anda (yang tidak diperbanyak secara otomatis seperti variabel lingkungan).

File konfigurasi shell terkenal lainnya:

/etc/bash_profile(fallback /etc/profile) dibaca sebelum pengguna .profileuntuk konfigurasi sistem-lebar, dan juga /etc/bashrcdalam subshell (tidak ada fallback untuk yang satu ini). Banyak sistem termasuk Ubuntu juga menggunakan /etc/profile.ddirektori yang berisi skrip shell, yang .( source) berasal dari /etc/profile; fragmen di sini adalah per-shell, dengan *.shberlaku untuk semua shell Bourne / POSIX yang kompatibel dan ekstensi lain yang berlaku untuk shell tertentu.

geekosaurus
sumber
58

.Profil

.profileadalah untuk hal-hal yang tidak terkait secara khusus Bash, seperti variabel lingkungan PATHdan teman, dan harus tersedia kapan saja.

Misalnya, .profilejuga harus dimuat ketika memulai sesi desktop grafis.


.bashrc

.bashrcadalah untuk mengkonfigurasi penggunaan Bash interaktif, seperti Bash aliases, mengatur favorit Anda editor, mengatur Bash prompt, dll.


.bash_profile

.bash_profile adalah untuk memastikan kedua hal tersebut masuk .profiledan .bashrcdimuat login shells.

Misalnya, .bash_profilebisa berupa sesuatu yang sederhana seperti

. ~/.profile
. ~/.bashrc

Jika Anda menghilangkan .bashrc, hanya .profileakan dimuat.

MangeshBiradar
sumber
1
Ini menjawab pertanyaan saya untuk Mac OS X
Jake Toronto
38

Menurut halaman manual bash, .bash_profiledieksekusi untuk shell login, sementara .bashrcdieksekusi untuk shell non-login interaktif.

Jadi, apakah itu shell login atau non-login?

Saat Anda masuk (ketikkan nama pengguna dan kata sandi) melalui konsol, baik duduk di mesin, atau dari jarak jauh melalui ssh: .bash_profiledijalankan untuk mengkonfigurasi shell Anda sebelum prompt perintah awal. Tetapi, jika Anda sudah masuk ke mesin Anda dan membuka jendela terminal baru (xterm) di dalam Gnome atau KDE, maka .bashrcdieksekusi sebelum jendela command prompt. .bashrcjuga dijalankan ketika Anda memulai instance bash baru dengan mengetikkan /bin/bashterminal.

Pengecualian untuk pedoman jendela terminal adalah Terminal.app Mac OS X, yang menjalankan shell login secara default untuk setiap jendela terminal baru, dan .bash_profilebukannya menelepon .bashrc. Emulator terminal GUI lain mungkin melakukan hal yang sama, tetapi kebanyakan cenderung tidak.

Lebih lanjut di sini .

Paulecci
sumber