TẠI SAO một ** đăng nhập ** vỏ trên một vỏ ** không đăng nhập **?


24

Tôi có một sự hiểu biết cơ bản về dotfiles trong hệ thống * nix. Nhưng tôi vẫn còn khá bối rối về sự khác biệt này giữa Shell đăng nhập và Shell không đăng nhập?

Một loạt các câu trả lời khác nhau (bao gồm nhiều bản sao) đã giải quyết các viên đạn sau:

  • Làm thế nào để gọi một đăng nhập hoặc không đăng nhập vỏ
  • Làm thế nào để phát hiện một đăng nhập hoặc không đăng nhập vỏ
  • Những tập tin khởi động nào sẽ được sử dụng bởi shell đăng nhập hoặc không đăng nhập
  • Tham khảo tài liệu (ví dụ man bash:) để biết thêm chi tiết

Điều mà các câu trả lời không nói (và cũng là điều tôi vẫn còn bối rối) là:

  • Là gì trường hợp sử dụng của một đăng nhập hoặc không đăng nhập vỏ? (ví dụ, tôi chỉ cấu hình zshrccho zshvà đó là đủ cho hầu hết các yêu cầu dev cá nhân, tôi biết đó là không đơn giản như những gì vimrcđến vim)

  • Là gì lý do để sử dụng một đăng nhập trên một phi login shell (ngoài tiêu thụ các file khởi động khác nhau và chu kỳ cuộc sống)?

Câu trả lời:


15

Ý 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, .profilev.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,, shoptcá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ụ: dfhoặ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 .loginhoặ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 .profilecâ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 dashvà trên các hệ thống khác mà chúng chạy với bashchế độ POSIX. Một vài lần một năm tôi chạy csh/ tcshtrong 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ụ, bashzsh) 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 zshshell đăng nhập, và sau đó có thể gọi một số zshshell 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 .loginhoặ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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.