2010-11-16 9 views
7

Cuando se utiliza lectura en bash, al presionar retroceso no se elimina el último carácter introducido, pero parece agregar un espacio de retroceso al almacenamiento intermedio de entrada. ¿Hay alguna forma de que pueda cambiarlo para que eliminar elimine la última clave escrita a partir de la entrada? ¿Si es así, cómo?Problema de comportamiento de botón de retroceso de lectura de lectura

He aquí una breve prog ejemplo lo estoy usando con si es de alguna ayuda:

#!/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

'if! leer ... ' –

Respuesta

11

La opción -n nchars convierte el terminal en modo sin procesar, por lo que su mejor oportunidad es confiar en readline (-e) [docs]:

$ read -n10 -e VAR 

Por cierto, buena idea, aunque me gustaría dejar el final de la palabra al usuario (que es una reacción automática al pulsar retorno ).

+1

De todos los interruptores en la página de manual -e es el único que no probé o_O. De todos modos, eso funcionó como quiero, con una peculiaridad: si presiono borrar cuando se ingresa un carácter, se borra toda la línea anterior. Parece que agregar una "-p" adicional al comando parecía arreglarlo. Aclamaciones. –

+0

solo usa -e flag – danday74