Retomar um processo suspenso em um loop for

12

Estou correndo no bash:

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

Eu Ctrl-Z no meio da execução e, em seguida, fg do seu ID de trabalho. Mas as iterações restantes não continuam a terminar. Eu me pergunto por quê?

    
por Tim 07.12.2014 / 20:37

1 resposta

11

Ctrl-Z suspende o processo atualmente em execução. Na expressão

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

todos os comandos, exceto convert (ou seja, for , in , do e done ), são palavras-chave bash em execução no shell atual e o shell não pode se suspender (e não é seu intenção de qualquer maneira). Portanto, quando você atingir Ctrl-Z e o comando convert for suspenso, o loop simplesmente será encerrado, já que não há mais nada para processar.

Se você quiser suspender todo o loop, basta executá-lo no ambiente de subshell:

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

O único shell que eu sei que é capaz de suspender todo o loop no shell atual é zsh .

    
por 07.12.2014 / 22:11

Tags