Ada berbagai jenis kerang. Shell eksekusi perintah SSH adalah shell non-interaktif, sedangkan shell normal Anda adalah shell login atau shell interaktif. Deskripsi berikut, dari man bash:
Shell login adalah karakter argumen pertama
nol adalah -, atau yang dimulai dengan opsi --login.
Shell interaktif adalah yang dimulai tanpa non-opsi
argumen dan tanpa opsi -c yang input standarnya
dan error keduanya terhubung ke terminal (seperti yang ditentukan
oleh isatty (3)), atau yang dimulai dengan opsi -i. PS1 adalah
set dan $ - termasuk saya jika bash bersifat interaktif, memungkinkan a
skrip shell atau file startup untuk menguji keadaan ini.
Paragraf berikut menjelaskan bagaimana bash mengeksekusi
file startup. Jika ada file yang ada tetapi tidak bisa
baca, bash melaporkan kesalahan. Tilde diperluas dalam file
nama seperti yang dijelaskan di bawah di bawah Ekspansi Tilde di
Bagian EKSPANSI.
Ketika bash dipanggil sebagai shell login interaktif, atau sebagai
shell non-interaktif dengan opsi --login, pertama-tama
membaca dan mengeksekusi perintah dari file / etc / profile, jika
file itu ada. Setelah membaca file itu, ia mencari
~ / .bash_profile, ~ / .bash_login, dan ~ / .profile, dalam
memesan, dan membaca serta menjalankan perintah dari yang pertama
yang ada dan dapat dibaca. Opsi --noprofile mungkin
digunakan ketika shell mulai menghambat behav ini
ior.
Ketika shell login keluar, bash membaca dan mengeksekusi perintah
dari file ~ / .bash_logout, jika ada.
Ketika shell interaktif itu bukan shell login
dimulai, bash membaca dan menjalankan perintah dari ~ / .bashrc,
jika file itu ada. Ini dapat dihambat dengan menggunakan
Opsi --norc. Opsi file --rcfile akan memaksa bash
untuk membaca dan menjalankan perintah dari file alih-alih
~ / .bashrc.
Ketika bash dimulai secara non-interaktif, untuk menjalankan shell
skrip, misalnya, mencari variabel BASH_ENV di
lingkungan, perluas nilainya jika muncul di sana,
dan menggunakan nilai yang diperluas sebagai nama file untuk dibaca
dan jalankan. Bash berperilaku seolah-olah perintah berikut
dieksekusi:
jika [-n "$ BASH_ENV"]; kemudian . "$ BASH_ENV"; fi
tetapi nilai variabel PATH tidak digunakan untuk mencari
untuk nama file.