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.