Dấu gạch ngang (-) trước bash


14

Nếu tôi kiểm tra shell bash của mình trong thiết bị đầu cuối OS X (10.6.4), chẳng hạn như bằng cách gõ echo $0, có một dấu gạch ngang phía trước vỏ của tôi, như thế này : -bash. Dấu gạch ngang này có nghĩa là gì?

Câu trả lời:


14

Nó có nghĩa bashlà được gọi như một vỏ đăng nhập.


man bash nói:

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

Khi bash được gọi dưới dạng shell đăng nhập tương tác hoặc dưới dạng shell không tương tác với --logintùy chọn, đầu tiên nó sẽ đọc và thực thi các lệnh từ tệp /etc/profile, nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó tìm kiếm ~/.bash_profile, ~/.bash_login~/.profile, theo thứ tự đó, đọc và thực thi các lệnh từ cái đầu tiên tồn tại và có thể đọc được. Các --noprofiletùy chọn có thể được sử dụng khi vỏ được bắt đầu để ức chế hành vi này.

Khi shell đăng nhập thoát, bash đọc và thực thi các lệnh từ tệp ~/.bash_logout, nếu nó tồn tại.


Bạn sẽ tìm thấy login -pftrong psđầu ra của bạn , bắt đầu một vỏ đăng nhập theo mặc định.

Hãy thử chạy login -pflogin -pflxem sự khác biệt. man loginmô tả sự khác biệt:

-lThông báo cho chương trình được thực hiện bằng cách đăng nhập rằng đây không phải là phiên đăng nhập (theo quy ước, phiên đăng nhập được báo hiệu cho chương trình có dấu gạch nối là ký tự đầu tiên của argv[0]; tùy chọn này vô hiệu hóa điều đó) và ngăn không chdir(2)cho vào thư mục chính của người dùng . Mặc định là thêm dấu gạch nối (đây là phiên đăng nhập).


Câu trả lời tuyệt vời, cảm ơn vì lời giải thích và mantrích dẫn
marshall.ward

1
Tôi đang sử dụng Ubuntu và tôi thấy các hành vi khác nhau của echo $0: nếu tôi nhập echo $0vào thiết bị đầu cuối được gọi bởi ctrl + alt + f1, kết quả là -bash; nhưng nếu tôi gõ nó trong termianl được gọi bởi ctrl + alt + t, kết quả là bash(không có dấu gạch đầu dòng). Bạn có thể giải thích tại sao?
Frozen Flame

@ Frozen-Flame Một là một vỏ đăng nhập, cái kia thì không. Lưu ý rằng các thiết bị đầu cuối OS X Terminal và Linux có hành vi khác nhau trong vấn đề đó.
Daniel Beck

@DanielBeck đó không phải là bằng chứng cho thấy cái kia không phải là vỏ đăng nhập. Khi bash được khởi chạy với --loginđối số, nó không thay đổi argv[0], nhưng hoạt động như một vỏ đăng nhập.
Ruslan

@Ruslan Chắc chắn, về lý thuyết nó vẫn có thể là một vỏ đăng nhập. Nhưng nó không phải là. (Ít nhất là tôi sẽ vô cùng ngạc nhiên nếu có.)
Daniel Beck
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.