Điều này trông giống như một lỗi trong một số shell, nó hoạt động như mong đợi với ksh93 và zsh .
Lý lịch:
Hầu hết các shell dường như chạy vòng lặp while bên trong shell chính và
Bourne Shell treo toàn bộ shell nếu bạn gõ ^ Z với shell không đăng nhập
Bash chỉ tạm dừng sleep
và sau đó rời khỏi vòng lặp while để in dấu nhắc shell mới
dấu gạch ngang làm cho lệnh này không được phép
Với ksh93 , mọi thứ hoạt động rất khác nhau:
ksh93 cũng làm như vậy, trong khi lệnh được bắt đầu lần đầu tiên, nhưng như sleep
là một buitin trong ksh93, ksh93 có một trình xử lý khiến vòng lặp while tách khỏi lớp vỏ chính và sau đó tạm dừng khi bạn gõ ^ Z.
Nếu bạn ở ksh93 loại sau fg
, con bị tắt mà vẫn chạy vòng lặp được tiếp tục.
Bạn thấy sự khác biệt chính khi so sánh các thông báo công việc từ bash và ksh93:
báo cáo bash :
[1]+ Stopped sleep 1
nhưng báo cáo ksh93 :
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh hành xử tương tự như ksh93
Với cả hai shell, bạn có một tiến trình duy nhất (shell chính) miễn là bạn không gõ ^ Z và hai tiến trình shell sau khi bạn nhập ^ Z.
$?
khi trả lại, vàtrue
sau đó thì khôngtrue
. có lẽ. tôi nghĩ.