Làm thế nào và tại sao lại thực hiện sai Viking đóng thiết bị đầu cuối?


8

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ư exitvậ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:


10

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/falsebất kỳ thứ gì có thể falsethự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


Là một lưu ý phụ, bashsẽ thực hiện việc dọn dẹp nhất định trước khi gọi execbao 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_historyvà 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.
kasperd

Ok cảm ơn bạn đã trả lời câu hỏi của tôi một cách hoàn hảo :)
dragonloverlord

Và một câu hỏi hay! do đó nâng cao cả hai! ;)
Fabby 14/03/2015

@jiliagre execgọ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 foundlỗi. Trong trường hợp của OP, falsecá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ụ, execcó 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ì execsẽ 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.
Sergiy Kolodyazhnyy
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.