Riprendi un processo sospeso in un ciclo for


13

Sto correndo in bash:

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

Io Ctrl-Znel bel mezzo della corsa, e poi il fgsuo id lavoro. Ma le iterazioni rimanenti non continuano a finire. Mi chiedo perché?


2
Posso confermare che per for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, versione 4.2.53)
— Hauke ​​Laging,

Risposte:


11

Ctrl-Zsospende il processo attualmente in esecuzione. In espressione

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

tutti i comandi, ad eccezione convert(ad esempio for, in, doe done) sono bash's parole chiave in esecuzione nella shell corrente e Shell non possono sospendere per sé (e non è vostra intenzione comunque). Quindi quando si preme Ctrl-Ze il comando convertsi interrompe, il loop si chiuderà semplicemente perché non c'è più nulla da elaborare.

Se vuoi essere in grado di sospendere l'intero ciclo, eseguilo nell'ambiente subshell:

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

L'unica shell che conosco che è in grado di sospendere l'intero loop nella shell corrente è zsh.


4
No, Ctrl-Zpotrebbe semplicemente sospendere l'istanza di una conversione, non c'è motivo per cui il ciclo non possa continuare e avviarne un'altra. Per qualche motivo bashinterrompe il ciclo. Quando continuo il test nel dashloop, probabilmente altre shell fanno lo stesso.
— Graeme,

6
@Graeme continuare il ciclo con un'iterazione sospesa mi sembra pericoloso poiché il passaggio successivo può dipendere dal precedente. L'unica soluzione ragionevole per me è sospendere l'intero ciclo e potrebbe essere fatto in subshell (in realtà zshè in grado di sospendere l'intero ciclo in esecuzione nella shell corrente).
— Jimmij,

3
Questa è probabilmente la risposta: bashprobabilmente gli sviluppatori hanno avuto la tua stessa opinione. Continuare il ciclo è comunque quello che mi sarei aspettato, tuttavia, quando si interrompe il processo e si torna al controllo manuale sulla shell, sembra naturale che riprenda da dove si era interrotto (e probabilmente sarebbe il comportamento bashse non si aggiungessero codice per fare qualcos'altro).
— Graeme,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.