Как удалить весь ввод после команды read в Bash?
При заполнении прогресс бара зажатием кнопки F (или любой другой буквой) в инпут консоли записываются невидимые буквы. Проблема в том, что при запуске select принимает невидимые символы как нужный ввод значения и пишет ошибку из кейса invalid option ffffffffffffffff1. Следующий же ввод проходит нормально. При использовании кнопки "Space" для заполнения прогресс бара, такой ошибки нету. Как удалить весь ввод после окончания цикла? Чтобы следующий select был с пустым вводом
#!/bin/bash
progress_bar(){
stty -echo #hide input
PROGRESS=0
bar=''
key_1="f" #Eng
key_2="а" #Rus
while true;
do
read -rs -N 1 -t 1 input
if [[ "$input" = "$key_1" || "$input" = "$key_2" ]]; then
((PROGRESS+=1))
sleep 0.05
bar="${bar} "
echo -ne "\r"
echo -ne "\e[46m$bar\e[0m"
echo -n "${PROGRESS}%"
else
((PROGRESS-=1))
sleep 0.05
bar="${bar} "
echo -ne "\r"
echo -ne "\e[41m$bar\e[0m"
echo -n "${PROGRESS}%"
fi
if [ $PROGRESS = 100 ];then
echo ""
echo "progress 100%"
sleep 3s
echo -e result
break;
fi
if [ $PROGRESS = -10 ];then
echo -e skip_progress
break;
fi
done
}
quit_menu(){
stty echo
clear
echo -e 'Please select \e[44m"Restart"\e[0m or \e[46m"Quit of game\e[0m"'
select opt in 'Restart' 'Quit';
do
case $opt in
"Restart")
echo "you chose restart"
sleep 1s
echo game
;;
"Quit")
clear
echo "Exit..."
exit 0
;;
*)
echo "invalid option $REPLY"
;;
esac
done
sleep 5s
}
echo -e "Hold down the key 'F'"
progress_bar
quit_menu
Ответы (1 шт):
Автор решения: Klimov
→ Ссылка
Перевод клавиши "забой" на кнопу ввода.
read -rs -N 1 -t 1 input
stty erase "$key_1"
в дополнение к комментарию. У тебя ошибка при использовании /dev/null нужно было писать вот так
$input 1>& /dev/null