Ý tưởng là người dùng nên có (nhiều nhất) một vỏ đăng nhập cho mỗi máy chủ. (Có lẽ tôi nên nói, một vỏ đăng nhập mỗi máy chủ mỗi thiết bị đầu cuối - nếu bạn đang đồng thời đăng nhập vào một máy chủ thông qua nhiều thiết bị đầu cuối, bạn sẽ mong đợi để có nhiều vỏ đăng nhập.) Điều này sẽ thường (luôn?) Là đầu tiên vỏ bạn nhận được khi đăng nhập (do đó tên). Vì vậy, lược đồ này cho phép bạn chỉ định các hành động mà bạn muốn xảy ra chỉ một lần cho mỗi lần đăng nhập và những điều bạn muốn xảy ra mỗi khi bạn bắt đầu một vỏ (tương tác) mới.
Thông thường, mọi shell khác mà bạn chạy sau khi đăng nhập sẽ là hậu duệ (con của một đứa trẻ con) của shell đăng nhập, và do đó sẽ thừa hưởng nhiều cài đặt (biến môi trường umask
, v.v.) từ shell đăng nhập. Và, theo đó, ý tưởng là các tệp khởi tạo đăng nhập ( .login
, .profile
v.v.) nên đặt các cài đặt có thể kế thừa và để .bashrc
(hoặc bất cứ thứ gì bạn sử dụng) xử lý các biến không phải ( set
,, shopt
các biến shell không được xuất , v.v.)
Một khái niệm khác là các tệp khởi tạo đăng nhập (và chỉ chúng) nên thực hiện nâng cấp nặng, tức là các hành động sử dụng nhiều tài nguyên. Ví dụ: bạn có thể muốn có một số quy trình nhất định chạy trong nền bất cứ khi nào bạn đăng nhập (nhưng chỉ có một bản sao (ví dụ) của chúng). Bạn có thể muốn có một số thông tin trạng thái (ví dụ: df
hoặc who
) được hiển thị khi bạn đăng nhập, nhưng không phải mỗi khi bạn bắt đầu một vỏ tương tác mới. Đặc biệt nếu bạn có một tương tácchương trình / hộp thoại (nghĩa là một chương trình yêu cầu đầu vào từ bạn) mà bạn muốn chạy mỗi khi bạn đăng nhập, có lẽ bạn không muốn nó chạy mỗi khi bạn khởi động trình bao mới. Một ví dụ cực đoan, hai mươi năm trước Solaris đã đăng nhập bạn vào một vỏ đơn, không có đồ họa, không có cửa sổ. (Tôi tin rằng nó đã thay đổi kể từ đó.) Đó là công việc của .login
hoặc .profile
(hoặc bất kỳ) để bắt đầu hệ thống cửa sổ, với một lệnh như startx
. (Điều này hữu ích một phần vì có sẵn nhiều hệ thống cửa sổ. Người dùng khác nhau có sở thích khác nhau. Một số người dùng đã sử dụng các hệ thống khác nhau trong các tình huống khác nhau và chúng tôi đã có một hộp thoại trong .profile
câu hỏi mà bạn muốn sử dụng hệ thống cửa sổ nào hôm nay? Rõ ràng, bạn sẽ không muốn nó chạy mỗi khi bạn mở một cửa sổ mới hoặc gõsh
.
Đã có từ rất lâu kể từ khi tôi sử dụng bất cứ thứ gì bash
ngoại trừ các trường hợp cạnh. (Ví dụ: tôi viết tập lệnh với #!/bin/sh
, vì vậy trên một số hệ thống, tập lệnh của tôi chạy cùng dash
và trên các hệ thống khác mà chúng chạy với bash
chế độ POSIX. Một vài lần một năm tôi chạy csh
/ tcsh
trong vài phút để xem cách nó xử lý một cái gì đó hoặc để trả lời một câu hỏi.) Nếu bạn sử dụng nhiều shell (ví dụ, bash
và zsh
) trên cơ sở hàng ngày, các mẫu của bạn có thể khác nhau. Nếu shell chính của bạn (như được xác định trong /etc/passwd
) là bash
, bạn có thể muốn gọi zsh
shell đăng nhập, và sau đó có thể gọi một số zsh
shell không đăng nhập tương tác phụ thuộc vào đó. Bạn có thể nên tránh có một vỏ đăng nhập phụ thuộc vào một vỏ đăng nhập khác cùng loại.
Như đã đề cập trong Sự khác biệt giữa Shell đăng nhập và Shell không đăng nhập? , ứng dụng OS X Terminal chạy một vỏ đăng nhập, do đó, một người dùng thông thường sẽ có một số vỏ đăng nhập của Lọ tên chạy đồng thời. Đây là một mô hình hơi khác so với người tôi đã mô tả ở trên, và có thể yêu cầu người dùng phải suy nghĩ lại những gì anh ấy làm trong mình .login
hoặc.profile
(hoặc bất cứ điều gì) tập tin. Tôi không biết liệu các nhà phát triển OS X có ghi lại lý do của họ cho quyết định thiết kế này hay không. Nhưng tôi có thể tưởng tượng một tình huống trong đó điều này sẽ hữu ích. Đã có lúc tôi thường xuyên mở một số cửa sổ shell khi tôi đăng nhập và tôi sẽ đặt chúng thành các màu văn bản và màu nền khác nhau (bằng cách viết các chuỗi thoát ANSI lên màn hình) để giúp tôi theo dõi đó là cái gì. Màu sắc thiết bị đầu cuối là một ví dụ về một cái gì đó không được thừa kế bởi trẻ em của trẻ em, nhưng vẫn tồn tại trong một cửa sổ. Vì vậy, đây là loại việc bạn muốn làm mỗi khi bạn bắt đầu một cửa sổ Terminal mới, nhưng không phải mỗi khi bạn bắt đầu một vỏ tương tác mới.