繁体   English   中英

如何清除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 ,该read将吞下该行直到下一个回车。

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

由于您没有使用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.

试试这个:

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 中刷新输入缓冲区。

这将执行您想要的操作:

{
  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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM