Pertanyaan ini sudah ada jawabannya di sini:
Ini memalukan, tapi setelah bertahun-tahun menggunakan sistem POSIX penuh waktu, saya masih memiliki waktu yang sulit mencari tahu apakah kustomisasi shell harus pergi di .bashrc
, .profile
, atau di tempat lain. Belum lagi beberapa file konfigurasi OS khusus seperti .pam_environment
.
Ya, saya tahu cara memecahkan dokumentasi dan belajar kapan setiap file dimuat atau tidak. Yang saya ingin tahu adalah apakah ada orang yang telah menyusun panduan komprehensif untuk bagaimana memutuskan file mana yang akan dikustomisasi.
Jawaban:
TL; DR:
~/.bash_profile
harus super sederhana dan hanya memuat.profile
dan.bashrc
(dalam urutan itu)~/.profile
memiliki barang-barang TIDAK secara spesifik terkait dengan bash, seperti variabel lingkungan (PATH
dan teman)~/.bashrc
memiliki apa pun yang Anda inginkan di baris perintah interaktif. Command prompt,EDITOR
variabel, alias bash untuk saya gunakanBeberapa catatan lain:
Apa pun yang harus tersedia untuk aplikasi grafis ATAU untuk sh (atau bash dipanggil sebagai
sh
) HARUS masuk~/.profile
~/.bashrc
tidak boleh mengeluarkan apapunApa pun yang seharusnya tersedia hanya untuk masuk shell harus masuk
~/.profile
Pastikan itu
~/.bash_login
tidak ada.sumber
~/.profile
pengaturan lingkungan yang tepat untuk layanan seperti GDM / LightDM / LXDM yang secara eksplisit menjalankan / bin / sh..bashrc
Keluaran saya cukup banyak, bisakah Anda mengomentari itu? Secara khusus, di mana saya harus meletakkan output ucapan?[[ $- == *i* ]]
, yaitu, mencari 'i' dalam$-
variabel khusus . Tentu saja, itu hanya penting di tempat pertama pada sistem di mana bash dikompilasi untuk membaca.bashrc
dalam mode non-interaktif. (Yaitu, Debian tetapi tidak Arch.) Tapi itu sering menjadi penyebab pesan kesalahan misterius ketika mencoba menghubungkan menggunakansftp
atauscp
atau alat serupa..bash_profile
dan.profile
. Tapi bash hanya membaca yang pertama dari tiga. Artinya, jika Anda memiliki.bash_login
, maka keduanya.profile
dan.bash_profile
akan diabaikan secara misterius.Selama beberapa tahun terakhir, saya punya banyak waktu untuk dihabiskan, jadi saya telah meneliti ini lebih dari 10 menit. Saya tidak tahu apakah ini tata letak terbaik, itu hanya salah satu yang bekerja dengan benar di hampir semua kasus.
Persyaratan:
~/.profile
harus kompatibel dengan sembarang / bin / sh - ini termasuk bash, dash, ksh, apa pun yang mungkin dipilih distro untuk digunakan.Variabel lingkungan harus dimasukkan ke dalam file yang dibaca oleh kedua login konsol (yaitu shell 'login') dan login grafis (yaitu manajer tampilan seperti GDM, LightDM, atau LXDM).
Ada sedikit gunanya memiliki keduanya
~/.profile
dan~/.bash_profile
. Jika yang terakhir hilang, bash akan dengan senang hati menggunakan yang pertama, dan setiap baris spesifik bash dapat dijaga dengan cek untuk$BASH
atau$BASH_VERSION
.Pemisahan antara
*profile
dan*rc
adalah bahwa yang pertama digunakan untuk shell 'login', dan yang terakhir setiap kali Anda membuka jendela terminal. Namun, bash dalam mode 'login' tidak sumber~/.bashrc
, oleh karena itu~/.profile
perlu melakukannya secara manual.The sederhana konfigurasi akan:
Memiliki
~/.profile
yang mengatur semua variabel lingkungan (kecuali yang spesifik-bash), mungkin mencetak satu atau dua baris, lalu sumber~/.bashrc
jika dijalankan oleh bash, tetap menggunakan sintaks yang kompatibel dengan sh sebaliknya.Miliki
~/.bashrc
yang melakukan pengaturan khusus shell, dijaga dengan pemeriksaan untuk mode interaktif untuk menghindari kerusakan hal-hal sepertisftp
di Debian (di mana bash dikompilasi dengan opsi untuk memuat~/.bashrc
bahkan untuk shell non-interaktif):Namun, ada juga masalah yang
ssh <host> ls
dilewati perintah non-interaktif tertentu (misalnya )~/.profile
, tetapi variabel lingkungan akan sangat berguna bagi mereka.Distribusi tertentu (mis. Debian) mengompilasi bash mereka dengan opsi untuk sumber
~/.bashrc
untuk login non-interaktif tersebut. Dalam hal ini, saya merasa berguna untuk memindahkan semua variabel lingkungan (export ...
baris) ke file yang terpisah~/.environ
,, dan untuk mengambilnya dari keduanya.profile
dan.bashrc
, dengan penjaga untuk menghindari melakukannya dua kali:Sayangnya, untuk distribusi lain (misalnya Arch), saya belum menemukan solusi yang sangat bagus. Salah satu kemungkinan adalah dengan menggunakan modul PAM (diaktifkan secara default) pam_env, dengan memasukkan yang berikut ini
~/.pam_environment
:Kemudian, tentu saja, memperbarui
~/.environ
keunset BASH_ENV
.Kesimpulan? Kerang itu menyakitkan. Variabel lingkungan itu menyebalkan. Pilihan waktu kompilasi distribusi khusus adalah rasa sakit yang luar biasa di pantat.
sumber
.profile
dan.bashrc
dari.bash_profile
dan menjaga.profile
kebersihan..profile
bersih , terima kasih.~/.profile
dan~/.bash_profile
": Saya tidak setuju. Lihat jawaban Dan untuk alasannya..profile
dan menjagabash
bagian-bagian khusus dengan persyaratan.Lihat posting blog yang luar biasa ini oleh ShreevatsaR . Berikut adalah ekstrak, tetapi pergi ke posting blog, itu termasuk penjelasan untuk istilah-istilah seperti "shell login", diagram alur, dan tabel serupa untuk Zsh.
sumber
/etc/profile
panggilan/etc/bash.bashrc
, dan~/.profile
panggilan~.bashrc
. Begitu efektif,/etc/bash.bashrc
dan~/.bashrc
sedang dieksekusi untuk Login Interaktif juga./bin/sh
BASH_ENV
). Paragraf terkait dari halaman bash man dapat ditemukan dengan mencariIf bash is invoked with the name sh
.Saya menawarkan pedoman "komprehensif":
.bash_profile
dan.profile
muat.bashrc
jika ada, menggunakan mis[ -r $HOME/.bashrc ] && source $HOME/.bashrc
.bashrc
.EDIT: Menambahkan kutipan menakut-nakuti ke "komprehensif" kalau-kalau ada orang yang tergoda untuk percaya. ;)
sumber
.bash_profile
dan.profile
sedikit berlebihan; Anda hanya membutuhkan yang terakhir. Anda perlu membuatnya / bin / sh-proof, meskipunif [ "$BASH" ] && [ -r ~/.bashrc ]; then . ~/.bashrc; fi
:, karena ada program (yaitu gdm / lightdm) yang secara manual sumber file dari skrip / bin / sh. Ini juga berarti bahwa lingkungan yang disimpan.bashrc
tidak akan efektif. Harus -1, karena pedoman "komprehensif" Anda tidak akan bekerja pada banyak sistem, karena saya telah menemukan jalan yang sulit beberapa kali.Saya menyerah untuk mencoba mencari yang ini dan membuat satu skrip (
~/.shell-setup
) yang saya sumber dari yang lain.Pendekatan ini
~/.shell-setup
harus memiliki dua fitur:# 1 cukup standar, meskipun mungkin tidak banyak digunakan dalam skrip shell.
# 2 lebih rumit. Inilah yang saya gunakan dalam bash:
Sayangnya saya tidak ingat bagaimana saya menemukan itu, atau mengapa mendeteksi shell interaktif tidak cukup.
sumber
Masukkan semuanya ke dalam
.bashrc
dan kemudian sumber.bashrc
dari.profile
Dari halaman bash man (pada OS X 10.9):
Teks di atas adalah mengapa semuanya dimasukkan
.bashrc
. Namun, ada perilaku yang sedikit berbeda ketika Anda berurusan dengan shell login. Sekali lagi, mengutip dari halaman manual:.profile
dibaca untuk shell login, tetapi.bashrc
tidak. Menggandakan semua hal itu.bashrc
adalah bad ™ sehingga kita perlu sumbernya.profile
agar perilaku tetap konsisten.Namun, Anda tidak ingin sumber
.bashrc
dari.profile
tanpa syarat. Silakan lihat komentar dan jawaban lain untuk detail tambahan.sumber
.bashrc
dari.profile
. Lihat jawaban @ DanRabinowitz.[ -n "$BASH" -a -f ~/.bashrc ] && . ~/.bashrc
akan menjadi oneliner yang manis untuk.profile
.