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
, do
và 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-Z
và lệnh convert
tạ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-Z
chỉ 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 bash
dừng vòng lặp. Khi tôi kiểm tra trong dash
vòng lặp tiếp tục, các shell khác có thể làm tương tự.
zsh
có thể tạm dừng toàn bộ vòng lặp đang chạy trong shell hiện tại).
bash
nhà 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 bash
nế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)