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ì?
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:
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_loginvà~/.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 -pfvà login -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ủaargv[0]; tùy chọn này vô hiệu hóa điều đó) và ngăn khôngchdir(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).
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?
--loginđối số, nó không thay đổi argv[0], nhưng hoạt động như một vỏ đăng nhập.
mantrích dẫn