Idenya adalah bahwa pengguna harus memiliki (paling banyak) satu shell login per host. (Mungkin saya harus mengatakan, satu shell login per host per terminal - jika Anda secara bersamaan login ke host melalui beberapa terminal, Anda akan mengharapkan memiliki beberapa shell login.) Ini biasanya (selalu?) Adalah shell pertama yang Anda dapatkan setelah masuk (maka namanya). Jadi, skema ini memungkinkan Anda menentukan tindakan yang Anda inginkan terjadi hanya sekali per login dan hal-hal yang Anda inginkan terjadi setiap kali Anda memulai shell (interaktif) baru.
Biasanya, setiap shell lain yang Anda jalankan setelah masuk akan menjadi keturunan (anak dari anak kecil ...) dari shell login, dan karenanya akan mewarisi banyak pengaturan (variabel lingkungan umask
, dll.) Dari shell login. Dan, sesuai dengan itu, idenya adalah bahwa file inisialisasi login ( .login
,, .profile
dll.) Harus mengatur pengaturan yang dapat diwarisi, dan biarkan .bashrc
(atau apa pun yang Anda gunakan) menangani yang tidak ( set
,, shopt
variabel shell yang tidak diekspor) , dll.)
Gagasan lain adalah bahwa file inisialisasi login (dan hanya mereka) harus melakukan "angkat berat", yaitu, tindakan intensif sumber daya. Misalnya, Anda mungkin ingin menjalankan proses tertentu di latar belakang setiap kali Anda masuk (tetapi hanya satu salinan (contoh) dari mereka). Anda mungkin ingin memiliki beberapa informasi status (misalnya, df
atau who
) ditampilkan ketika Anda masuk, tetapi tidak setiap kali Anda memulai shell interaktif baru. Apalagi jika Anda memiliki interaktifprogram / dialog (yaitu, yang membutuhkan input dari Anda) yang ingin Anda jalankan setiap kali Anda login, Anda mungkin tidak ingin menjalankannya setiap kali Anda memulai shell baru. Sebagai contoh ekstrem, dua puluh tahun yang lalu Solaris login Anda ke shell tunggal, non-grafis, non-windowed. (Saya percaya bahwa itu telah berubah sejak saat itu.) Adalah tugas .login
atau .profile
(atau apa pun) untuk memulai sistem windowing, dengan perintah seperti startx
. (Ini berguna sebagian karena ada beberapa sistem windowing tersedia. Pengguna yang berbeda memiliki preferensi yang berbeda. Beberapa pengguna menggunakan sistem yang berbeda dalam situasi yang berbeda, dan kami memiliki dialog di kami .profile
yang bertanya "Sistem windowing mana yang ingin Anda gunakan hari ini?") Jelas, Anda tidak ingin itu berjalan setiap kali Anda membuka jendela baru atau mengetiksh
.
Sudah lama sejak saya menggunakan selain dari bash
kasus tepi. (Sebagai contoh, saya menulis skrip dengan #!/bin/sh
, jadi pada beberapa sistem, skrip saya berjalan dengan dash
, dan pada yang lain dijalankan dengan bash
dalam mode POSIX. Beberapa kali setahun saya menjalankan csh
/ tcsh
selama beberapa menit untuk melihat bagaimana ia menangani sesuatu, atau untuk jawab sebuah pertanyaan.) Jika Anda menggunakan banyak cangkang (misalnya, bash
dan zsh
) setiap hari, pola Anda mungkin berbeda. Jika shell utama Anda (sebagaimana didefinisikan dalam /etc/passwd
) adalah bash
, Anda mungkin ingin memanggil zsh
shell login, dan kemudian mungkin memanggil beberapa zsh
shell non-login interaktif yang lebih rendah dari itu. Anda mungkin harus menghindari memiliki shell login yang berada di bawah shell login lain dari jenis yang sama.
Seperti disebutkan dalam Perbedaan antara Login Shell dan Non-Login Shell? , aplikasi Terminal OS X menjalankan shell login, sehingga pengguna biasa biasanya memiliki beberapa "shell login" berjalan secara bersamaan. Ini adalah model yang agak berbeda dari model yang telah saya jelaskan di atas, dan mungkin mengharuskan pengguna untuk memikirkan kembali apa yang dia lakukan di .login
atau.profile
File (atau apa pun). Saya tidak tahu apakah pengembang OS X telah mendokumentasikan alasan mereka untuk keputusan desain ini. Tapi saya bisa membayangkan situasi di mana ini akan berguna. Ada saat ketika saya biasanya membuka beberapa jendela shell ketika saya masuk, dan saya akan mengaturnya ke teks dan warna latar belakang yang berbeda (dengan menulis urutan melarikan diri ANSI ke layar) untuk membantu saya melacak yang mana. Warna terminal adalah contoh dari sesuatu yang tidak diwariskan oleh anak-anak, tetapi tetap ada di dalam jendela. Jadi ini adalah hal yang ingin Anda lakukan setiap kali Anda memulai jendela Terminal baru, tetapi tidak setiap kali Anda memulai shell interaktif baru.