Prompt avec reponse par defaut dans les 5 secondes

Résolu
Bonjour,
comment définir une action par defaut au bout de x secondes si pas de choix de la part de l'utilisateur

Mon exemple :

echo "Dou you want to force creation of SecClass if not used yet in LOP1? [Y|N] "
read answer
case "$answer" in
Y|y) echo "Ok ca marche, et je suis super content !"
;;
N|n) echo "Ok ca marche aussi, et je suis aussi super content !"
;;

esac

concrêtement j'aimerais que si l'utilisateur n'effectue pas d'action clavier la valeur se mette sur N par defaut au bout de 5 secondes par exemple

Merci de votre aide

2 réponses

  1. Contributeur
    Salut,

    man read

    $ cat foo.sh 
    #! /bin/bash
    
    read -t 5 -p " Voulez-vous continuez (O/N) ? " 
    if [ "$?" -eq 142 ]
    then REPLY=N
    fi
    case ${REPLY} in
    O)	echo -e "\nChoix = Oui";;
    N)	echo -e "\nChoix = Non";;
    esac
    
    $ ./foo.sh 
     Voulez-vous continuez (O/N) ? O
    
    Choix = Oui
    
    $ ./foo.sh 
     Voulez-vous continuez (O/N) ? N
    
    Choix = Non
    
    $ ./foo.sh 
     Voulez-vous continuez (O/N) ? 
    Choix = No
    0
    1. Salut,
      D'après la doc ( https://ss64.com/bash/read.html ) l'option -t permet de définir un timeout après lequel la commande renvoi faux, exemple :

      #!/bin/bash
      
      echo "Entre du texte..."
      read -t 5 answer
      if [ $answer ]
      then
      	echo "reponse : $answer"
      else
      	echo "trop tard"
      fi;

      0
      1. Contributeur
        Salut,

        else
        echo "trop tard"


        ;-DD
        0
      2. Zut grillé... Salut zipe31 !
        0
      3. salut,

        if test -n "$answer"
        avec des guillemets, si par hasard $answer contenait plusieurs mots.
        0
      4. Merci à tous de votre aide
        0