Ich kann das für for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, Version 4.2.53)
Hauke Laging
Antworten:
10
Ctrl-Zunterbricht den aktuell laufenden Prozess. Im Ausdruck
for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done
alle Befehle mit Ausnahme von convert(dh for, in, dound done) sind bash‚Keywords s in der aktuellen Shell ausgeführt und Shell selbst nicht unterbrechen kann (und es ist nicht Ihre Absicht sowieso). Wenn Sie also drücken Ctrl-Zund der Befehl convertangehalten wird, wird die Schleife einfach beendet, da nichts mehr zu verarbeiten ist.
Wenn Sie die gesamte Schleife anhalten möchten, führen Sie sie einfach in der Subshell-Umgebung aus:
(for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done)
Die einzige mir bekannte Shell, die in der Lage ist, die gesamte Schleife in der aktuellen Shell anzuhalten, ist zsh.
Nein, das Ctrl-Zkönnte nur die eine Konvertierungsinstanz aussetzen, es gibt keinen Grund, warum die Schleife nicht fortgesetzt und eine andere gestartet werden könnte. Aus irgendeinem Grund bashstoppt die Schleife. Wenn ich in dashder Schleife weiter teste, machen andere Shells wahrscheinlich dasselbe.
Graeme
6
@Graeme Die Fortsetzung der Schleife mit einer angehaltenen Iteration erscheint mir gefährlich, da der nächste Schritt vom vorherigen abhängen kann. Die einzige vernünftige Lösung für mich ist, die gesamte Schleife auszusetzen. Dies kann in einer Subshell erfolgen (tatsächlich zshkann die gesamte Schleife, die in der aktuellen Shell ausgeführt wird, ausgesetzt werden ).
Jimmy
3
Das ist wahrscheinlich die Antwort - die bashEntwickler waren wahrscheinlich der gleichen Meinung wie Sie. Die Schleife fortzusetzen ist immer noch das, was ich erwartet hätte. Wenn Sie den Prozess stoppen und die Handsteuerung wieder auf die Shell übertragen, scheint es natürlich, dass sie dort aufhört, wo sie aufgehört hat (und wahrscheinlich das Verhalten ist, bashwenn sie nichts hinzugefügt haben Code, um etwas anderes zu tun).
for i in *.txt; do echo "$i"; sleep 0.5 ; done
(GNU bash, Version 4.2.53)Antworten:
Ctrl-Z
unterbricht den aktuell laufenden Prozess. Im Ausdruckalle Befehle mit Ausnahme von
convert
(dhfor
,in
,do
unddone
) sindbash
‚Keywords s in der aktuellen Shell ausgeführt und Shell selbst nicht unterbrechen kann (und es ist nicht Ihre Absicht sowieso). Wenn Sie also drückenCtrl-Z
und der Befehlconvert
angehalten wird, wird die Schleife einfach beendet, da nichts mehr zu verarbeiten ist.Wenn Sie die gesamte Schleife anhalten möchten, führen Sie sie einfach in der Subshell-Umgebung aus:
Die einzige mir bekannte Shell, die in der Lage ist, die gesamte Schleife in der aktuellen Shell anzuhalten, ist
zsh
.quelle
Ctrl-Z
könnte nur die eine Konvertierungsinstanz aussetzen, es gibt keinen Grund, warum die Schleife nicht fortgesetzt und eine andere gestartet werden könnte. Aus irgendeinem Grundbash
stoppt die Schleife. Wenn ich indash
der Schleife weiter teste, machen andere Shells wahrscheinlich dasselbe.zsh
kann die gesamte Schleife, die in der aktuellen Shell ausgeführt wird, ausgesetzt werden ).bash
Entwickler waren wahrscheinlich der gleichen Meinung wie Sie. Die Schleife fortzusetzen ist immer noch das, was ich erwartet hätte. Wenn Sie den Prozess stoppen und die Handsteuerung wieder auf die Shell übertragen, scheint es natürlich, dass sie dort aufhört, wo sie aufgehört hat (und wahrscheinlich das Verhalten ist,bash
wenn sie nichts hinzugefügt haben Code, um etwas anderes zu tun).