as vezes um trap-and-continue-a-loop em ctrl-c no bash não continua [fechado]

4

Eu tenho a seguinte armadilha definida no meu script (longo):

#!/usr/bin/env bash

function continue_on_ctrl_c() {
        echo "** CTRL-C trapped **"
        continue # jump to the next iteration in the for loop
}
trap continue_on_ctrl_c INT

... rest of the script...
for i in several things here; do
  echo "doing: $i"
  find "$i" ..... | sometreatments # some of those take a long time: I wish to skip those using ctrl-C
done

Quando eu pressiono ctrl-C para "cancelar" o achado atual e pulo para o próximo, ele chama a armadilha (vejo a mensagem que a função ecoa em primeiro lugar), mas depois sai do shell script em vez de ir a próxima iteração do loop for.

 # ./longscript.bash
 doing: several
 ** CTRL-C trapped **
 #               #<-- ie, it exited to the prompt, instead of continuing the for loop

Considerando que em um pequeno script de "prova de conceito", ele funciona e continua até a próxima iteração.

#!/usr/bin/env bash

function continue_on_ctrl_c() {
        echo "** CTRL-C trapped **"
        continue # jump to the next iteration in the for loop
}
trap continue_on_ctrl_c INT

for i in 1 2 3 ; do
   echo " doing: $i "
   sleep 100
done

# ./continue.bash
 doing: 1
** CTRL-C trapped **
 doing: 2
** CTRL-C trapped **
 doing: 3
** CTRL-C trapped **
#

O que devo procurar no primeiro script que o impede de continuar até a próxima iteração do loop for, mas sai (ao passo que ainda há 3 elementos a serem tratados no loop for)?

É porque quando pressiono estou em um subshell (find ... | treatement)? Mas então parece que o shell de nível superior (aquele que está iniciando o script) é o que está recebendo o ctrl-C enquanto exibe a mensagem ...

Eu estou perdido aqui ...

    
por Olivier Dulac 18.05.2017 / 13:37

0 respostas

Tags