2010-11-16 3 views
7

При использовании чтения в bash нажатие на обратное пространство не удаляет последний введенный символ, но, как представляется, добавляет обратное пространство во входной буфер. Есть ли способ изменить его, чтобы удалить удаляет последний введенный из ввода ключ? Если да, то как?Проблема с поведением кнопки Backspace для чтения Bash

Вот краткий пример прог я использую его, если это какой-либо помощи:

#!/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! read ... ' –

ответ

11

Опция -n nchars превращает терминал в нестандартном режиме, так что ваш лучший шанс полагаться на readline (-е) [docs]:

$ read -n10 -e VAR 

Кстати, хорошая идея, хотя я оставил бы конец слова пользователя (это коленный рефлекс нажать возврата).

+1

Из всех переключателей на man-странице - это единственный, который я не пробовал o_O. Во всяком случае, это заставило его работать, как я хочу, с одной причудой: если я нажму кнопку delete, когда введен один символ, вся предыдущая строка будет удалена. Кажется, что добавление дополнительного -p "" в команду, похоже, исправить. Приветствия. –

+0

использовать только -e флаг – danday74