Jawaban:
Jika Anda adalah pengguna normal Ubuntu Desktop, satu - satunya shell login adalah ... desktop Anda (Anda mengetikkan kata sandi untuk masuk, kan;)? Yah, secara teknis itu adalah shell login yang memulai GUI, tapi itu masuk ke jargon. Dan ya, itu akan membaca pengaturan di.profile
Satu-satunya saat Anda (pengguna normal) mungkin akan melihat shell login yang terlihat seperti shell login adalah jika Anda mengalami masalah dengan desktop Anda dan Anda beralih ke terminal virtual dengan Ctrl+ Alt+ F1shortcut.
ssh
(atau menghubungkan secara lokal dengan ssh localhost
)bash -l
(atau sh -l
)root
shell login awal dengansudo -i
sudo -u username -i
root
root
pengguna lain dengan (dan kata sandi mereka )su - username
sudo login
perintah untuk mengalihkan pengguna~/.pam_environment
(hanya variabel, tidak ada perintah bash di sana!), Logout, masuk, dan saksikan semuanya secara ajaib muncul di desktop dan juga di gnome-terminal!
/etc/profile
, /etc/profile.d
atau ~/.profile
.
Saya tidak berpikir bahwa jawaban yang benar dapat diberikan tanpa "jargon teknis". Karena pertanyaan ini adalah yang pertama muncul di Google untuk pertanyaan "apa itu shell login", saya memberikan jawaban yang lebih benar di bawah ini:
Shell login hanyalah shell yang disuruh menjadi shell login. Itu tidak berarti shell yang muncul setelah Anda login, meskipun biasanya aplikasi yang login Anda mengatakan shell diluncurkan untuk menjadi shell login. Ada beberapa cara berikut untuk memberi tahu shell apakah itu harus login:
-l
atau --login
argumen dengan asumsi itu mengetahuinya (Saya tidak tahu ada shell yang tidak tahu -l
, tetapi --login
hanya didukung oleh beberapa shell).argv[0]
set to -{some_string}
(yaitu dengan HYPHEN-MINUS diawali dengan biasanya argv[0]
atau ke string lain). Ini adalah apa ssh dan su lakukan: su hanya berjalan dieksekusi dengan -su
sebagai argv[0]
(Halo untuk semua orang berpikir argv[0]
ada hubungannya dengan yang sedang berjalan nama executable), ssh berjalan zsh dengan -zsh
ketika pengguna telah menetapkan /bin/zsh
sebagai cangkangnya.Loginess dari shell sama sekali tidak ada hubungannya dengan siapa pun yang meminta Anda kata sandi atau melakukan beberapa prosedur autenikasi lainnya. Beberapa program seperti ssh atau login (atau beberapa emulator terminal seperti urxvt) menjalankan shell sebagai yang menggunakan login yang argv[0]
dimulai dengan HYPHEN-MINUS. Beberapa seperti su atau sudo (atau zsh: lihat -
pengubah precommand yang dijelaskan di bagian PRECOMMAND MODIFIER in man zshmisc
) tidak melakukan ini secara default, tetapi dapat dikatakan demikian. Beberapa memiliki satu-satunya pilihan untuk memberitahu shell menjadi login menggunakan argumennya (yaitu bash -l
): ssh dengan argumen perintah (yang secara eksplisit memberitahu ssh apa yang harus dijalankan pada remote end).
Umumnya lebih baik untuk terlebih dahulu berkonsultasi dokumentasi dari program yang digunakan untuk memohon shell untuk menentukan apakah shell akan login satu dan kedua melakukan beberapa tes untuk menentukan apakah aplikasi akan meluncurkan shell login (misalnya dengan menambahkan echo
ke .profile
).
argv[0]
ke salah satu exec*
fungsi, alami dan tak terhindarkan: Anda selalu menyediakan keduanya argv[0]
dan path ke perintah benar-benar dijalankan ketika menggunakan exec*
fungsi, bahkan jika Anda tidak pernah ingin argv[0]
berbeda dari menjalankan perintah. Bahasa lain menyediakan caranya sendiri. Khususnya bash mengizinkan penggunaan exec -a new_argv0 bash
, tetapi ini, tentu saja, akan menggantikan shell yang saat ini berjalan dengan apa pun yang Anda exec
edit, jadi Anda mungkin perlu menggunakan (exec -a -zsh zsh)
$0
, dan, mungkin juga sesuatu yang lain (variabel, pengaturan, dll) diatur sehingga loginess dari shell dapat dideteksi dalam file konfigurasi, tetapi siapa yang sebenarnya mendeteksi ini sehingga akan ada bedanya? Itu semua yang aku tahu.