Saya memahami perbedaan mendasar antara shell interaktif dan shell non-interaktif. Tapi apa sebenarnya yang membedakan shell login dari shell non-login?
Dapatkah Anda memberikan contoh penggunaan interaktif non-login cangkang?
Jawaban yang Diterima:
Shell login adalah proses pertama yang dijalankan di bawah ID pengguna Anda saat Anda masuk untuk sesi interaktif. Proses login memberi tahu shell untuk berperilaku sebagai shell login dengan konvensi:meneruskan argumen 0, yang biasanya merupakan nama shell yang dapat dieksekusi, dengan -
karakter yang ditambahkan (mis. -bash
padahal biasanya bash
. Shell login biasanya membaca file yang melakukan hal-hal seperti mengatur variabel lingkungan:/etc/profile
dan ~/.profile
untuk shell Bourne tradisional, ~/.bash_profile
tambahan untuk bash, /etc/zprofile
dan ~/.zprofile
untuk zsh, /etc/csh.login
dan ~/.login
untuk csh, dll.
Saat Anda masuk di konsol teks, atau melalui SSH, atau dengan su -
, Anda mendapatkan login interaktif kerang. Saat Anda masuk dalam mode grafis (pada manajer tampilan X), Anda tidak mendapatkan shell login, tetapi Anda mendapatkan manajer sesi atau manajer jendela.
Jarang menjalankan login non-interaktif shell, tetapi beberapa pengaturan X melakukannya ketika Anda masuk dengan manajer tampilan, untuk mengatur untuk membaca file profil. Pengaturan lain (ini tergantung pada distribusi dan pada pengelola tampilan) baca /etc/profile
dan ~/.profile
eksplisit, atau tidak membacanya. Cara lain untuk mendapatkan shell login non-interaktif adalah dengan login dari jarak jauh dengan perintah yang melewati input standar yang bukan terminal, mis. ssh example.com <my-script-which-is-stored-locally
(sebagai lawan dari ssh example.com my-script-which-is-on-the-remote-machine
, yang menjalankan shell non-interaktif, non-login).
Saat Anda memulai shell di terminal dalam sesi yang ada (layar, terminal X, buffer terminal Emacs, shell di dalam yang lain, dll.), Anda mendapatkan interaktif, non-login kerang. Shell itu mungkin membaca file konfigurasi Shell (~/.bashrc
untuk bash dipanggil sebagai bash
, /etc/zshrc
dan ~/.zshrc
untuk zsh, /etc/csh.cshrc
dan ~/.cshrc
untuk csh, file yang ditunjukkan oleh ENV
variabel untuk shell yang sesuai dengan POSIX/XSI seperti tanda hubung, ksh, dan bash saat dipanggil sebagai sh
, $ENV
jika disetel dan ~/.mkshrc
untuk mksh, dll.).
Saat shell menjalankan skrip atau perintah yang diteruskan pada baris perintahnya, itu adalah non-interaktif, non-login kerang. Kerang seperti itu berjalan sepanjang waktu:sangat umum bahwa ketika sebuah program memanggil program lain, itu benar-benar menjalankan skrip kecil di dalam cangkang untuk menjalankan program lain itu. Beberapa shell membaca file startup dalam kasus ini (bash menjalankan file yang ditunjukkan oleh BASH_ENV
variabel, zsh menjalankan /etc/zshenv
dan ~/.zshenv
), tetapi ini berisiko:shell dapat dipanggil dalam semua jenis konteks, dan hampir tidak ada yang dapat Anda lakukan yang mungkin tidak merusak sesuatu.
Saya menyederhanakan sedikit, lihat manual untuk detail berdarah.