Câu trả lời:
Nếu bạn là người dùng bình thường của Ubuntu Desktop, vỏ đăng nhập duy nhất là ... máy tính để bàn của bạn (bạn nhập mật khẩu để vào, phải không?)? Chà, về mặt kỹ thuật, đó là một vỏ đăng nhập khởi động GUI, nhưng đó là đi vào biệt ngữ. Và vâng, nó sẽ đọc các cài đặt trong.profile
Thời gian duy nhất bạn (một người sử dụng bình thường) có thể sẽ thấy một vỏ đăng nhập mà trông giống như một vỏ đăng nhập là nếu bạn đang gặp một số vấn đề với máy tính của bạn và bạn chuyển sang một thiết bị đầu cuối ảo với Ctrl+ Alt+ F1phím tắt.
ssh
(hoặc kết nối cục bộ với ssh localhost
)bash -l
(hoặc sh -l
)root
vỏ đăng nhập ban đầu vớisudo -i
sudo -u username -i
root
root
người không sử dụng khác với (và mật khẩu của họ )su - username
sudo login
lệnh để chuyển người dùng~/.pam_environment
(chỉ các biến, không có lệnh bash nào trong đó!), Đăng xuất, đăng nhập và xem mọi thứ xuất hiện một cách kỳ diệu trên máy tính để bàn cũng như trong gnome-terminal!
/etc/profile
, /etc/profile.d
hoặc ~/.profile
.
Tôi không nghĩ rằng câu trả lời chính xác có thể được đưa ra mà không có thuật ngữ kỹ thuật giỏi. Vì câu hỏi này là câu hỏi đầu tiên xuất hiện trong Google cho truy vấn, nên tên đăng nhập shell là gì, tôi sẽ cung cấp một câu trả lời đúng hơn dưới đây:
Shell đăng nhập chỉ đơn giản là một shell được bảo là shell đăng nhập. Điều đó không có nghĩa là shell bật lên sau khi bạn đăng nhập, mặc dù thông thường ứng dụng đăng nhập bạn đang nói với shell nó sẽ khởi chạy thành shell đăng nhập. Có tồn tại các cách sau để nói shell nên là một đăng nhập:
-l
hoặc --login
đối số giả sử nó biết nó (tôi không biết bất kỳ shell nào không biết -l
, nhưng --login
chỉ được hỗ trợ bởi một vài shell).argv[0]
thiết lập -{some_string}
(nghĩa là với HYPHEN-MINUS được chuẩn bị trước thông thường argv[0]
hoặc với một số chuỗi khác). Đây là những gì ssh và su làm: su chỉ chạy thực thi với -su
tư cách argv[0]
(xin chào mọi người nghĩ argv[0]
có liên quan đến tên thực thi hiện đang chạy), ssh chạy zsh -zsh
khi người dùng đã đặt /bin/zsh
làm vỏ của mình.Loginess của shell hoàn toàn không liên quan gì đến bất cứ ai hỏi bạn mật khẩu hoặc thực hiện một số thủ tục xác thực khác. Một số chương trình như ssh hoặc đăng nhập (hoặc một số trình giả lập thiết bị đầu cuối như urxvt) chạy shell như một chương trình đăng nhập bằng cách sử dụng argv[0]
bắt đầu bằng HYPHEN-MINUS. Một số như su hoặc sudo (hoặc zsh: xem công -
cụ sửa đổi preommand được mô tả trong phần PRECOMMAND MODFORMERS trong man zshmisc
) không làm điều này theo mặc định, nhưng có thể được nói như vậy. Một số có tùy chọn duy nhất là bảo shell là đăng nhập bằng cách sử dụng đối số của nó (ví dụ bash -l
): ssh với một đối số lệnh (điều đó nói rõ ràng với ssh những gì sẽ chạy trên đầu từ xa).
Nói chung, tốt nhất là trước tiên hãy tham khảo tài liệu của chương trình được sử dụng để gọi shell để xác định xem shell sẽ là lần đăng nhập thứ hai và thứ hai thực hiện một số thử nghiệm để xác định xem ứng dụng có khởi chạy shell đăng nhập hay không (ví dụ: bằng cách thêm echo
vào .profile
).
argv[0]
cho một trong các exec*
hàm, điều tự nhiên và không thể tránh khỏi: bạn luôn cung cấp cả hai argv[0]
và đường dẫn để lệnh thực sự chạy khi sử dụng các exec*
hàm, ngay cả khi bạn không muốn argv[0]
khác với chạy lệnh. Các ngôn ngữ khác cung cấp cách riêng của họ. Cụ thể bash cho phép sử dụng exec -a new_argv0 bash
, nhưng điều này, tất nhiên, sẽ thay thế shell hiện đang chạy bằng bất cứ thứ gì bạn exec
ed, vì vậy bạn có thể cần phải sử dụng subshell ( (exec -a -zsh zsh)
)
$0
và, cũng có thể là một cái gì đó khác (biến, cài đặt, v.v.) được đặt để tính logic của vỏ có thể được phát hiện trong tệp cấu hình, nhưng ai làm phiền thực sự phát hiện ra điều này để nó sẽ tạo ra sự khác biệt? Đó là tất cả những gì tôi biết.