Alternativa de tempo limite de lote?

1

O que eu preciso é de 80 segundos de sono, que eu poderia pular batendo uma tecla. Ser capaz de ver o tempo restante seria uma vantagem.

    
por Keeklah 22.09.2015 / 14:59

2 respostas

2

Uma maneira mais simples seria

read -t 80 -n 1 -s -p "Hit a key to continue"

Você não verá o tempo restante. Se você quiser ver o tempo restante, você pode usar um script mais complexo envolvendo um subshell:

( for i in {80..0}; do
    echo Wait for $i seconds or press any key;
    sleep 1;
  done )&
read -t 80 -n 1 -s; kill $!

Indiscutivelmente, o comando kill é um pouco inseguro, embora seja realmente improvável que o subshell falhe em adormecer e termine cedo, possibilitando que um processo inocente reutilize seu PID e seja morto.

    
por 22.09.2015 / 15:37
0

Um script muito simples pode ser:

#!/bin/bash

IFS=_
count=80
echo "hit a key:"
while [ $count -ge 1 ]
do
    echo -e -n "\rtime remaining: $count"
    read -n 1 -s -t 1 myresponse
    if [ "$myresponse" ]
    then
        echo -e -n "\nyou entered: $myresponse\n"
        break
    fi
    ((count--))
done
if [ $count -eq 0 ]
then
    echo -e -n "\nyou did not entered anything\n"
fi

EDIT : Adicionada a linha IFS para alterar o separador de campo para um sublinhado. Agora o script funciona com espaço em branco, guia e chave de retorno. De fato, é mais seguro incluir o teste com aspas, então eu as adicionei.

    
por 22.09.2015 / 15:19