Mogę potwierdzić, że dla for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, wersja 4.2.53)
Hauke Laging
Odpowiedzi:
11
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.
Nie, 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.
Graeme,
6
@Graeme kontynuowanie pętli z zawieszoną jedną iteracją wydaje mi się niebezpieczne, ponieważ następny krok może zależeć od poprzedniego. Jedynym rozsądnym rozwiązaniem dla mnie jest zawieszenie całej pętli i można to zrobić w podpowłoce (faktycznie zshjest w stanie zawiesić całą pętlę działającą w bieżącej powłoce).
jimmij
3
To prawdopodobnie odpowiedź - 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)Odpowiedzi:
Ctrl-Z
zawiesza aktualnie uruchomiony proces. W wyrazieWszystkie polecenia z wyjątkiem
convert
(czylifor
,in
,do
idone
) tobash
„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śnieszCtrl-Z
, a polecenieconvert
zawiesi 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:
Jedyną znaną mi powłoką, która może zawiesić całą pętlę w bieżącej powłoce, jest
zsh
.źródło
Ctrl-Z
mogą po prostu zawiesić jedną instancję konwersji, nie ma powodu, dla którego pętla nie mogłaby kontynuować i uruchomić innej. Z jakiegoś powodubash
zatrzymuje pętlę. Kiedydash
kontynuuję test w pętli, inne powłoki prawdopodobnie robią to samo.zsh
jest w stanie zawiesić całą pętlę działającą w bieżącej powłoce).bash
programiś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,bash
gdyby nie dodali kod, aby zrobić coś innego).