Я могу подтвердить, что для for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, Версия 4.2.53)
Hauke Laging
Ответы:
11
Ctrl-Zприостанавливает текущий запущенный процесс. В выражении
for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done
все команды , кроме convert(то есть for, in, doи done) являются bash«s ключевыми словами , работающими в текущей оболочке и оболочка не может приостановить себя (и это не ваши намерения , так или иначе). Поэтому, когда вы нажимаете Ctrl-Zи команда convertприостанавливается, цикл просто завершается, так как больше нечего обрабатывать.
Если вы хотите приостановить весь цикл, просто запустите его в среде subshell:
(for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done)
Единственная известная мне оболочка, которая способна приостановить весь цикл в текущей оболочке, это zsh.
Нет, Ctrl-Zможет просто приостановить один экземпляр преобразования, нет никаких причин, почему цикл не может продолжить и запустить другой. По какой-то причине bashостанавливает цикл. Когда тестирование в dashцикле продолжается, другие оболочки, вероятно, делают то же самое.
Грэм
6
@Graeme продолжение цикла с одной приостановленной итерацией кажется мне опасным, поскольку следующий шаг может зависеть от предыдущего. Единственное разумное решение для меня - это приостановить весь цикл, и это можно сделать в subshell (на самом деле zshон может приостановить весь цикл, работающий в текущей оболочке).
Джимми
3
Это, вероятно, ответ - bashразработчики, вероятно, были того же мнения, что и вы. Продолжение цикла - все еще то, что я ожидал, хотя, когда вы останавливаете процесс и передаете управление обратно в оболочку, кажется естественным для него выбрать, где он остановился (и, вероятно, это будет поведение, bashесли они не добавят код, чтобы сделать что-то еще).
for i in *.txt; do echo "$i"; sleep 0.5 ; done
(GNU bash, Версия 4.2.53)Ответы:
Ctrl-Z
приостанавливает текущий запущенный процесс. В выражениивсе команды , кроме
convert
(то естьfor
,in
,do
иdone
) являютсяbash
«s ключевыми словами , работающими в текущей оболочке и оболочка не может приостановить себя (и это не ваши намерения , так или иначе). Поэтому, когда вы нажимаетеCtrl-Z
и командаconvert
приостанавливается, цикл просто завершается, так как больше нечего обрабатывать.Если вы хотите приостановить весь цикл, просто запустите его в среде subshell:
Единственная известная мне оболочка, которая способна приостановить весь цикл в текущей оболочке, это
zsh
.источник
Ctrl-Z
может просто приостановить один экземпляр преобразования, нет никаких причин, почему цикл не может продолжить и запустить другой. По какой-то причинеbash
останавливает цикл. Когда тестирование вdash
цикле продолжается, другие оболочки, вероятно, делают то же самое.zsh
он может приостановить весь цикл, работающий в текущей оболочке).bash
разработчики, вероятно, были того же мнения, что и вы. Продолжение цикла - все еще то, что я ожидал, хотя, когда вы останавливаете процесс и передаете управление обратно в оболочку, кажется естественным для него выбрать, где он остановился (и, вероятно, это будет поведение,bash
если они не добавят код, чтобы сделать что-то еще).