#!/bin/bash
# timed-input.sh

# TMOUT=3            Fonctionne aussi, depuis les dernières versions de Bash.

INTERRUPTION_TIMER=14
LIMITETEMPS=3  # Trois secondes dans cette instance
               # Peut être configuré avec une valeur différente.

AfficheReponse()
{
  if [ "$reponse" = TIMEOUT ]
  then
    echo $reponse
  else       # ne pas mixer les deux interfaces.
    echo "Votre légume favori est le $reponse"
    kill $!  #  Kill n'est plus nécessaire pour la fonction TimerOn lancée en
             #+ tâche de fond.
             # $! est le PID du dernier job lancé en tâche de fond.
  fi

}  


TimerOn()
{
  sleep $LIMITETEMPS && kill -s 14 $$ &
  # Attend trois secondes, puis envoie sigalarm au script.
}  


VecteurInt14()
{
  reponse="TIMEOUT"
  AfficheReponse
  exit $INTERRUPTION_TIMER
}  

trap VecteurInt14 $INTERRUPTION_TIMER   #  Interruption de temps (14)
                                        #+ détournée pour notre but.

echo "Quel est votre légume favori?"
TimerOn
read reponse
AfficheReponse


#  C'est une implémentation détournée de l'entrée de temps.
#  Néanmoins l'option "-t" de "read" simplifie cette tâche.
#  Voir le script "t-out.sh", ci-dessous.

#  Si vous avez besoin de quelque chose de réellement élégant...
#+ pensez à écrire l'application en C ou C++,
#+ en utilisant les fonctions de la bibliothèque appropriée, telles que
#+ 'alarm' et 'setitimer'.
#  Néanmoins, pourquoi ne pas chronométrer un script complet,
#+ à la place d'une simple saisie d'un utilisateur ?

exit 0
