如何清除 bash 中的输入

how to clear input in bash

我正在制作一个脚本,它在任务完成后读取答案,然后将其写入文本文件。我希望这个答案只有一个字符:

task1
read -n 1 answer < /dev/tty
echo $answer >> result.txt
task2
read -n 1 answer < /dev/tty
echo $answer >> result.txt

问题是,如果我不小心按了两次键盘,第二个字符会保留在内存中,并将其作为下一个答案写入。

我想插入一个命令,在第一个字符写入 file.txt 后刷新内存 谢谢

只需添加一个 read 即可将线路吞入下一个马车 return。

task1
read -n 1 answer
echo $answer >> result.txt
read
task2
read -n 1 answer
echo $answer >> result.txt
read

试试这个:

task 1
read  first
answer=`cut -b1 <<<$first`
echo $answer >> result.txt

task 2
read second
answer=`cut -b1 <<<$second`
echo $answer >> result.txt

无法刷新 shell 中的输入缓冲区。

由于您没有使用 ENTER 来捕获答案,因此您需要建立一个延迟来识别什么是意外按下。因此,在您读取第一个字符后,您可以使用 read -e -t2 放弃 2 秒内的任何按键操作。

task1
read -n 1 answer 
echo $answer >> result.txt
read -e -t2 #Discard additional input within 2 seconds.
task2
read -n 1 answer 
echo $answer >> result.txt
read -e -t2 #Discard additional input within 2 seconds.

这会做你想做的事:

{
  original_terminal_state="$(stty -g)"
  stty -icanon -echo min 0 time 0
  LC_ALL=C dd bs=1 > /dev/null 2>&1
  stty "$original_terminal_state"
} < /dev/tty