Tôi biết rằng đây có lẽ là một câu hỏi tương đối vô nghĩa, nhưng tôi tò mò về lý do tại sao exec false
đóng thiết bị đầu cuối giống như exit
vậy.
Tôi cũng muốn biết liệu đây có phải là cách chấp nhận để đóng thiết bị đầu cuối hay không.
Tôi biết rằng đây có lẽ là một câu hỏi tương đối vô nghĩa, nhưng tôi tò mò về lý do tại sao exec false
đóng thiết bị đầu cuối giống như exit
vậy.
Tôi cũng muốn biết liệu đây có phải là cách chấp nhận để đóng thiết bị đầu cuối hay không.
Câu trả lời:
exec false
đang thay thế shell hiện tại bằng cách thực thi lệnh false
(ở đây không phải là shell dựng sẵn mà là /bin/false
bất kỳ thứ gì có thể false
thực thi được đặt trước trong PATH
) sẽ nhanh chóng thoát ra. Nếu shell là tiến trình cao nhất đang chạy trong trình giả lập thiết bị đầu cuối của bạn, thì không còn quá trình nào chạy bên trong nó nữa nên trình giả lập thiết bị đầu cuối bị đóng.
Đây là một cách thay thế chấp nhận được để đóng một thiết bị đầu cuối, giống như sẽ có nhiều lệnh tương tự:
exec true
exec sleep 0
exec echo
...
Xem thêm: what-does-an-exec-Command-do
bash
sẽ thực hiện việc dọn dẹp nhất định trước khi gọi exec
bao gồm cả việc viết lệnh tới .bash_history
. Vì vậy, nếu người ta chỉ muốn lưu vào .bash_history
và khởi chạy một shell mới trong cùng một cửa sổ terminal, người ta có thể làm như vậy bằng cách gõ exec bash
.
exec
gọi các lệnh được tìm thấy PATH
, không được tích hợp sẵn. Chẳng hạn, exec [[ $USER = root ]]
sẽ trả về bash: exec: [[: not found
lỗi. Trong trường hợp của OP, false
cái đó được gọi là /bin/false
, và không phải là vỏ tích hợp. Nếu không, câu trả lời tốt, do đó +1. Như một lưu ý phụ, exec
có thể là một loại lệnh bị cắt, tức là nếu ba lệnh đó trong ví dụ của bạn được tạo thành một tập lệnh, thì không có gì vượt quá đầu tiên exec
, bởi vì exec
sẽ thay thế shell được gọi bởi script bằng bất kỳ lệnh nào ở bên phải của exec
.