Ya, itulah perilaku yang diharapkan.
Singkatnya, perilaku tersebut adalah sebagai berikut:
- bash dimulai sebagai shell login interaktif: terbaca
~/.profile
- bash dimulai sebagai shell non-login interaktif: baca
~/.bashrc
Baca manual bash tentang file startup untuk detail lebih lanjut.
Secara pribadi, saya pikir perilaku ini aneh dan saya belum menemukan rasionalisasi untuk keputusan desain ini.
Beberapa penjelasan tentang terminologi:
- Sebuah shell interaktif adalah shell dengan mana Anda dapat berinteraksi, yang berarti Anda dapat mengetik perintah di dalamnya. Kebanyakan cangkang yang akan Anda gunakan adalah cangkang interaktif.
- Sebuah shell non-interaktif adalah shell dengan yang Anda tidak bisa berinteraksi. Script shell dijalankan di dalam shell non-interaktif.
- Sebuah shell login adalah shell yang dimulai ketika Anda login ke sistem anda.
- Sebuah non-login shell adalah shell yang dimulai setelah proses login.
Sebagian besar shell yang Anda lihat adalah shell non-login interaktif . Ini terutama benar jika Anda menjalankan lingkungan grafis seperti gnome, karena gnome adalah "shell login". Setiap sesi bash yang dimulai di dalam gnome adalah shell non-login. Jika Anda ingin melihat shell login interaktif nyata kemudian pergi ke konsol virtual (menggunakan Ctrl+Alt+F1
) dan kemudian login menggunakan nama pengguna dan kata sandi Anda. Itu adalah shell bash login interaktif nyata. Anda dapat kembali ke shell grafis menggunakan Ctrl+Alt+F7
.
Ada opsi --login
yang akan membuat bash berperilaku seolah-olah itu adalah shell login bahkan jika dimulai setelah Anda login. Mengkonfigurasi gnome-terminal untuk memulai bash sebagai shell login berarti bash akan mulai bash menggunakan --login
opsi.
Biasanya Anda ingin bash selalu membaca ~/.bashrc
dalam shell interaktif. Inilah cara saya merekomendasikan untuk melakukan itu:
Buat ~/.bash_profile
file. Jika bash dimulai sebagai shell login, ia akan mencari terlebih dahulu ~/.bash_profile
sebelum mencari ~/.profile
. Jika bash menemukan ~/.bash_profile
maka itu tidak akan dibaca ~/.profile
.
Masukkan baris berikut di ~/.bash_profile
:
[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
Sekarang jika bash dimulai sebagai shell login interaktif itu akan membaca file-file berikut:
~/.bash_profile
~/.profile
~/.bashrc
dan jika bash dimulai sebagai shell non-login interaktif:
~/.bashrc
Anda harus meletakkan barang-barang yang khusus untuk bash ~/.bashrc
dan barang-barang yang tidak spesifik untuk bash di ~/.profile
. Misalnya PATH
masuk ~/.profile
dan HISTCONTROL
masuk ~/.bashrc
.
Catatan yang ~/.profile
tidak spesifik untuk bash. Kerang berbasis teks lainnya (misalnya sh atau ksh) dan kerang grafis (gnome) juga membaca ~/.profile
. Itulah mengapa Anda tidak harus menempatkan barang-barang tertentu pesta di ~/.profile
.
~/.bashrc
di tempat pertama, di profil sebagai gantinya. Kesalahan ada di rvm.~/.profile
.bashrc
relatif terhadap apa yang perlu dilakukan. Jika shell interaktif selalu membaca.bashrc
apakah itu sebelum atau sesudah.profile
? Bagaimana jika Anda ingin mengatur beberapa hal.bashrc
yang.profile
dianggap remeh? Dan pada saat yang sama Anda ingin beberapa hal.bashrc
bergantung pada sesuatu yang diatur oleh.profile
? Pesanan pemuatan tidak akan memenuhi kedua skenario.Ini bukan keputusan desain yang buruk, atau bug, atau perilaku yang diharapkan dari shell dan terminal
Ini hanyalah nilai default yang tidak menguntungkan dari opsi konfigurasi per-profil di Terminal Gnome, yang dapat Anda perbaiki dengan mudah.
Pergi ke Edit -> Preferensi Profil .
Pilih tab Judul dan Perintah .
Perhatikan bagaimana perintah Jalankan sebagai kotak centang shell masuk tidak dicentang! Periksa.
Itu dia. Jika Anda melakukan ini pada
Default
profil, atau ke profil apa pun yang dikonfigurasi untuk digunakan saat membuat terminal baru, Anda akan mendapatkan shell login.Saya menduga bahwa di bawah tenda, opsi ini mungkin menyebabkannya meneruskan
-l
opsi ke shell.sumber
Saya memiliki pertanyaan yang sama, dan menemukan solusi: Cukup gunakan SSH untuk shell login yang sebenarnya!
1. Sebagai superuser, buat pengguna sistem rvm khusus untuk isolasi lengkap, dan berikan kata sandi:
sudo su
useradd -m rvmuser
passwd rvmuser
2. Instal dependensi agar rvm dapat membuat rubi tanpa meminta kata sandi superuser:
apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev
3. SSH ke localhost untuk shell login asli (Anda mungkin harus
apt-get install ssh
)ssh rvmuser@localhost
4. Instal rvm
\curl -sSL https://get.rvm.io | bash -s stable
5. Logout dan kembali lagi sehingga semua fungsi rvm dimuat
exit
ssh rvmuser@localhost
6. Gunakan rvm :)
sumber
Adalah umum ketika menggunakan bash untuk menempatkan inisialisasi profil
.bash_profile
, yang hanya dibaca oleh bash saat login, sedangkan cangkang lain telah dibagikan secara historis.profile
. Ini memungkinkan Anda untuk menempatkan perintah spesifik bash di.bash_profile
.Penggunaan berikut ini biasanya dilakukan untuk menarik alias yang didefinisikan dalam
.bashrc
:sumber