Câu trả lời:
Ctrl-Zđình chỉ quá trình hiện đang chạy. Trong biểu hiện
for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done
tất cả các lệnh trừ convert(tức là for, in, dovà done) là bash's từ khóa chạy trong vỏ hiện tại và vỏ không thể ngừng bản thân (và nó không phải là ý định của bạn dù sao đi nữa). Vì vậy, khi bạn nhấn Ctrl-Zvà lệnh converttạm dừng, vòng lặp sẽ đơn giản thoát vì không còn gì để xử lý nữa.
Nếu bạn muốn có thể tạm dừng toàn bộ vòng lặp thì chỉ cần chạy nó trong môi trường subshell:
(for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done)
Shell duy nhất tôi biết có khả năng treo toàn bộ vòng lặp trong shell hiện tại là zsh.
Ctrl-Zchỉ có thể đình chỉ một trường hợp chuyển đổi, không có lý do tại sao vòng lặp không thể tiếp tục và bắt đầu một phiên bản khác. Đối với một số lý do bashdừng vòng lặp. Khi tôi kiểm tra trong dashvòng lặp tiếp tục, các shell khác có thể làm tương tự.
zshcó thể tạm dừng toàn bộ vòng lặp đang chạy trong shell hiện tại).
bashnhà phát triển có thể có cùng quan điểm với bạn. Tiếp tục vòng lặp vẫn là những gì tôi mong đợi, mặc dù vậy, khi bạn dừng quá trình và điều khiển tay quay trở lại vỏ, có vẻ như nó tự nhiên để chọn nơi nó rời đi (và có lẽ sẽ là hành vi bashnếu họ không thêm vào mã để làm một cái gì đó khác).
for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, Phiên bản 4.2.53)