Odpowiedzi:
Ctrl-Zzawiesza aktualnie uruchomiony proces. W wyrazie
for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done
Wszystkie polecenia z wyjątkiem convert(czyli for, in, doi done) to bash„s kluczowych uruchomione w bieżącej powłoki i powłoki nie może zawiesić się (i to nie jest twój zamiar tak czy inaczej). Kiedy więc naciśniesz Ctrl-Z, a polecenie convertzawiesi się, pętla po prostu się zakończy, ponieważ nie ma już nic do przetworzenia.
Jeśli chcesz mieć możliwość zawieszenia całej pętli, po prostu uruchom ją w środowisku podpowłoki:
(for i in ull-*.pbm; do convert "$i" "tmp2/$i.pdf" ; done)
Jedyną znaną mi powłoką, która może zawiesić całą pętlę w bieżącej powłoce, jest zsh.
Ctrl-Zmogą po prostu zawiesić jedną instancję konwersji, nie ma powodu, dla którego pętla nie mogłaby kontynuować i uruchomić innej. Z jakiegoś powodu bashzatrzymuje pętlę. Kiedy dashkontynuuję test w pętli, inne powłoki prawdopodobnie robią to samo.
zshjest w stanie zawiesić całą pętlę działającą w bieżącej powłoce).
bashprogramiści prawdopodobnie mieli taką samą opinię jak ty. Kontynuowanie pętli jest jednak tym, czego bym się spodziewał. Gdy zatrzymasz proces i ponownie włączysz sterowanie ręczne do powłoki, wydaje się naturalne, że wybrała miejsce, w którym została przerwana (i prawdopodobnie byłoby to zachowanie, bashgdyby nie dodali kod, aby zrobić coś innego).
for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, wersja 4.2.53)