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 bash
là đượ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--login
tù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
--login
tù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
và~/.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--noprofile
tù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 -pf
trong 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 -pf
và login -pfl
xem sự khác biệt. man login
mô tả sự khác biệt:
-l
Thô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 $0
và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.
man
trích dẫn