Điều hành $ SHELL -l làm gì?


9

Tôi đã thấy lệnh này trong một vài kịch bản shell khác nhau:

exec $SHELL -l

... thường là một thay thế cho:

source ~/.profile

Chính xác thì exec $SHELL -lđang làm gì?

Câu trả lời:


9

Lệnh exec thay thế hình ảnh quá trình hiện tại - chương trình thực thi hoặc chương trình - bằng một hình thức mới, được đặt tên là đối số để thực thi. Nếu $ SHELL chứa tên của một tệp thực thi, như thường lệ, thì exec sẽ quay vòng exe lên thay cho shell đang chạy.

TUY NHIÊN, đó là một hành động rất khác so với việc chỉ sử dụng "nguồn" để đọc trong tệp lệnh. Lệnh nguồn đọc tệp được đặt tên và thực thi dòng nội dung theo dòng, như thể được gõ vào dòng lệnh của shell hiện tại.


7

Nó gọi shell của bạn ( $SHELL) làm shell đăng nhập.

đoạn trích từ trang Bash của người đàn ông

-l       Make bash act as if it had been invoked as a login shell 
         (see INVOCATION below).

Tôi đề nghị đọc qua phần HÓA ĐƠN của trang man để biết thêm thông tin.

TL; DR;

Điểm mấu chốt là nó báo cho Bash biết tập tin nào cần nguồn khi nó gọi. Hoặc $HOME/.bash_profile( -l) hoặc $HOME/.bashrc( -i).

Người giới thiệu


Trả nó về phía trước 8-)
slm

Ah, vậy nó có quan tâm đến sự không nhất quán trong tên tệp hồ sơ bash không?
Andrew

1
Bạn đang tung ra một vỏ mới. Vì vậy, nếu bạn đã thực hiện thay đổi cho cấu hình shell, chạy lệnh $ SHELL -l sẽ "áp dụng" những thay đổi đó. Chạy nguồn ~ / .profile sẽ làm như vậy mà không cần khởi động trình bao mới, ngoại trừ mọi biến hoặc hàm trong cấu hình của bạn không được ghi đè sẽ vẫn được đặt như ban đầu.
jktravis
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.