2010-11-16 9 views
7

Lors de l'utilisation de read in bash, le fait d'appuyer sur retour arrière ne supprime pas le dernier caractère entré, mais semble ajouter un retour arrière au tampon d'entrée. Est-il possible que je puisse le changer afin que supprimer supprime la dernière clé tapée de l'entrée? Si c'est le cas, comment?Problème de comportement du bouton de retour arrière Bash

Voici un court exemple prog que je l'utilise avec si elle est de toute aide:

#!/bin/bash 

colour(){ #$1=text to colourise $2=colour id 
     printf "%s%s%s" $(tput setaf $2) "$1" $(tput sgr0) 
} 
game_over() { #$1=message $2=score  
     printf "\n%s\n%s\n" "$(colour "Game Over!" 1)" "$1" 
     printf "Your score: %s\n" "$(colour $2 3)" 
     exit 0 
} 

score=0 
clear 
while true; do 
     word=$(shuf -n1 /usr/share/dict/words) #random word from dictionary 
     word=${word,,} #to lower case 
     len=${#word} 
     let "timeout=(3+$len)/2" 
     printf "%s (time %s): " "$(colour $word 2)" "$(colour $timeout 3)" 
     read -t $timeout -n $len input #read input here 
     if [ $? -ne 0 ]; then 
       game_over "You did not answer in time" $score 
     elif [ "$input" != "$word" ]; then 
       game_over "You did not type the word correctly" $score; 
     fi 
     printf "\n" 
     let "score+=$timeout" 
done 
+0

'si! read ... ' –

Répondre

11

L'option -n nchars transforme le terminal en mode brut, de sorte que votre meilleure chance est de compter sur readline (-e) [docs]:

$ read -n10 -e VAR 

BTW, bonne idée, bien que je laisserais la fin du mot à l'utilisateur (il est une réaction réflexe d'appuyer sur retour).

+1

Sur tous les commutateurs de la page de manuel -e est le seul que je n'ai pas essayé o_O. Quoi qu'il en soit, cela a fonctionné comme je le souhaitais, avec une seule bizarrerie: si j'appuie sur delete quand un caractère est entré, toute la ligne précédente est supprimée. Il semble que l'ajout d'un -p "" à la commande a semblé le réparer. À votre santé. –

+0

il suffit d'utiliser -e flag – danday74

Questions connexes