Возобновление приостановленного процесса в цикле for

Я бегу в bash:

for i in ull-*.pbm; do convert $i tmp2/$i.pdf ; done 

Я Ctrl-Z в середине запуска, а затем fg его идентификатор работы. Но оставшиеся итерации не продолжают заканчиваться. Интересно, почему?

Ctrl-Z приостанавливает текущий текущий процесс. В выражении

 for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done 

все команды, кроме convert (т.е. for , in , do и done ), являются ключевыми словами bash , запущенными в текущей оболочке, и оболочка не может приостановить себя (и это не ваше намерение так или иначе). Поэтому, когда вы нажимаете Ctrl-Z , а команда convert suspends, цикл просто прекращается, так как больше ничего не обрабатывать.

Если вы хотите приостановить весь цикл, просто запустите его в среде подсетей:

 (for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done) 

Единственная оболочка, которую я знаю, способная приостановить весь цикл в текущей оболочке, – zsh .