Como tornar esse loop Ctrl + C-interruptible?

3
# wait for host to become online
while true; do
    ping host -c 1 -w 3 > /dev/null && break;
    sleep 1
done

Quando pressiono Ctrl + C , o ping o recebe e sai com o código de saída 1 (o mesmo que se o host estivesse desligado). Como faço isso corretamente?

Solução alternativa: sleep 1 || break e pressionando ^ C duas vezes.

    
por Vi. 16.07.2015 / 01:59

2 respostas

3
trap "exit 1" INT

while true; do
    ping host -c 1 -w 3 > /dev/null && break;
    sleep 1
done

trap - INT # restore handler
    
por 16.07.2015 / 02:09
1

Apenas não escreva o seu loop tão estranho.

until ping host -c 1 -w 3
do    sleep 1
done  >/dev/null

Fazer o que foi mencionado acima exigirá mais mais dois pressionamentos de tecla ^C em uma linha para sair do loop - e isso é por causa de sleep . Mas se você colocar mais uma vez:

sh -c '
    until ping host -c 1 -w 3
    do    sleep 1
    done' >/dev/null

... você não precisará nem dos dois.

    
por 16.07.2015 / 08:18