Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中清除输入_Bash_Flush - Fatal编程技术网

如何在bash中清除输入

如何在bash中清除输入,bash,flush,Bash,Flush,我正在制作一个脚本,任务完成后读取答案,然后将其写入文本文件。我希望这个答案只有一个字符: task1 read -n 1 answer < /dev/tty echo $answer >> result.txt task2 read -n 1 answer < /dev/tty echo $answer >> result.txt task1 阅读-n 1答案>result.txt 任务2 阅读-n 1答案>result.txt 问题是,如果我不小心按了

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

task1
read -n 1 answer < /dev/tty
echo $answer >> result.txt
task2
read -n 1 answer < /dev/tty
echo $answer >> result.txt
task1
阅读-n 1答案>result.txt
任务2
阅读-n 1答案>result.txt
问题是,如果我不小心按了两次键盘,第二个字符将保留在内存中,并将其作为下一个答案写入

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

只需添加一个
读物
,它将吞掉该行直到下一次cariage退货

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
任务1
先读
answer=`cut-b1因为您没有使用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
{
原始终端状态=“$(stty-g)”
stty-icanon-回波最小值0时间0
LC_ALL=C dd bs=1>/dev/null 2>&1
stty“$原始\终端\状态”
}
无需指定“我正在执行的任务重定向了标准输入。我同意在这篇文章中没有必要这样做,我应该删除它。问题是shell从来不会直接从键盘读取数据;它从文件中读取数据,但无法控制写入该文件的内容。您的终端模拟器是需要配置此行为的地方。我希望我的脚本自动继续到“read-n1 answer”之后的下一行。如果我添加另一个read,我必须按enter键才能继续,如果我添加“read-n1”,如果我只按一次,它也不会继续