Tại sao chúng ta có vỏ bash đăng nhập, không đăng nhập, tương tác và không tương tác?


23

Vì vậy, các trang bash man giải thích các shell đăng nhập và tương tác là gì:

Một vỏ đăng nhập là một vỏ có ký tự đầu tiên của đối số 0 là - hoặc bắt đầu bằng tùy chọn --login.

Một vỏ tương tác được bắt đầu mà không có đối số không phải tùy chọn và không có tùy chọn -c có đầu vào và lỗi tiêu chuẩn được kết nối với các thiết bị đầu cuối (như được xác định bởi isatty (3)) hoặc bắt đầu bằng tùy chọn -i. PS1 được đặt và $ - bao gồm i nếu bash tương tác, cho phép tập lệnh shell hoặc tệp khởi động để kiểm tra trạng thái này.

Tôi nghĩ điều này có nghĩa là chúng ta có thể có 4 loại vỏ khác nhau:

  • Shell đăng nhập tương tác,
  • Shell đăng nhập không tương tác,
  • Shell không đăng nhập tương tác,
  • Shell không đăng nhập không tương tác

Nhưng tại sao chúng ta có vỏ tương tác / không tương tác và đăng nhập / không đăng nhập ở vị trí đầu tiên? Tại sao giống? Chúng ta sẽ mất gì nếu chỉ có một loại vỏ?

Ngoài ra khi cố gắng xác định xem tôi có đang ở trong vỏ đăng nhập hay không echo $-, nó sẽ xuất ra:

himBH

Một số trong những lá cờ được giải thích ở đây , nhưng h, Hmkhông được giải thích. Có một nơi mô tả tất cả những lá cờ?

Câu trả lời:


21

Đây là những suy nghĩ của tôi về các "loại" vỏ khác nhau - thật không may, tôi đã không chứng kiến ​​sự trỗi dậy của Un * x ngay từ đầu (tôi cho rằng khái niệm này đã được phát triển trong lịch sử đến một phần mở rộng tốt), vì vậy xin hãy phê phán.

  • Khi tôi đăng nhập vào một hệ thống (ngày nay thông qua đăng nhập đồ họa X), có thể có một số tác vụ nên chạy một lần, ví dụ: thiết lập kết nối với một loại máy chủ nào đó, đưa cho tôi danh sách việc cần làm hôm nay, tự động khởi động một số lệnh, v.v. không nên vui vẻ mỗi khi tôi mở một thiết bị đầu cuối mới. Vì vậy, có một tập hợp các tập tin cấu hình ( /etc/profile, ~/.bash_loginvà vân vân, hãy tham khảo hướng dẫn cho một danh sách chính xác) chỉ nguồn gốc của đăng nhập vỏ.
  • Theo đó, để đóng các kết nối, hủy một số chương trình, chạy tập lệnh sao lưu có ~/.bash_logoutkhi shell đăng nhập tồn tại.
  • vì vậy, trình bao "bình thường" mà tôi sử dụng trong một thiết bị đầu cuối, không nên sử dụng trình bao đăng nhập , nhưng tuy nhiên nên đọc sở thích cá nhân của tôi ~/.bashrc, bởi vì tôi muốn các tổ hợp phím của mình tương tác với trình bao - do đó đây là một trình tương tác, không tương tác đăng nhập vỏ.
  • và cuối cùng, nhưng không kém phần quan trọng khi bash được sử dụng cho kịch bản, điều này không quan trọng. bashnên bắt đầu nhanh nhất có thể, tức là không nên đọc bất kỳ tập tin cấu hình nào. Đây là một vỏ không tương tác, không đăng nhập .

Vì vậy, câu trả lời của tôi cho câu hỏi của bạn Chúng ta sẽ mất gì nếu chỉ có một loại vỏ? là trong một từ: "Linh hoạt."


Câu trả lời cho câu hỏi thứ hai của bạn rất dễ dàng:

$-liệt kê các tùy chọn hiện tại Chúng có thể được đặt bởi các tham số dòng lệnh đến bashhoặc thông qua setnội dung. Vì vậy, bạn phải xem hai nơi trong hướng dẫn:

  • OPTIONS phần:

    -i        If the -i option is present, the shell is interactive.
  • SHELL BUILTIN COMMANDSphần, tiểu mục set:

    -h      Remember the location of commands as they are looked up for execution.  This is enabled by default.
    -m      Monitor  mode.  Job control is enabled.  This option is on by default for interactive shells on systems that sup
            port it (see JOB CONTROL above).  Background processes run in a separate process  group  and  a  line  containing
            their exit status is printed upon their completion.
    -B      The shell performs brace expansion (see Brace Expansion above).  This is on by default.
    -H      Enable !  style history substitution.  This option is on by default when the shell is interactive.

1
Woo tôi tin rằng @mpy trả lời cho câu hỏi được xây dựng rõ ràng của OP có thể thành công trong việc định nghĩa một số định nghĩa khá hữu ích. Về điều đó: Vì vậy, shell không đăng nhập chỉ là một tập hợp con của shell đăng nhập phải không?
tuk0z
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.