Como alterar a saída do script bash quando o script está sendo executado?

1

Eu tenho o seguinte loop que conta de 0 a 99:

    #!/bin/bash

for ((i=0;i<100;i++));
do
   echo $i
   sleep 1
done

Existe uma maneira de alterar o resultado da saída do terminal enquanto este script de loop está sendo executado. Digamos que, se eu pressionar a letra k, o loop adicione automaticamente mais 10 números ao número atual, portanto, se tivermos 10 exibidos na tela e pressionarmos K, o loop deverá mudar automaticamente para 20! Obrigado

    
por Scott Pearce 04.04.2015 / 18:26

1 resposta

2

Como mencionado no comentário, você pode usar:

read -t 1 -n 1 key

que, por causa da opção -t , podemos remover sleep , então seu script pode ser:

#!/bin/bash

for ((i=0; i<100; i++)); do
    read -t 1 -n 1 key
    if [ "$key" = "k" ]; then
        i=$((i + 10))
    fi
    echo $i
done

Mas acho que mais portátil poderia ser:

#!/bin/bash

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

keystroke=''
i=0
while [ $i -lt 100 ]; do
    keystroke="$(dd bs=1 count=1 2>/dev/null)" # http://www.tldp.org/LDP/abs/html/
    if [ "$keystroke" = "k" ]; then
        i=$(( i + 10 ))
    elif [ "$keystroke" = "q" ]; then
        break
    fi
    i=$(( i + 1 ))
        echo $i
    sleep 1 
done

if [ -t 0 ]; then stty sane; fi

exit 0
    
por 04.04.2015 / 22:41