如何清除 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
我正在制作一个脚本,它在任务完成后读取答案,然后将其写入文本文件。我希望这个答案只有一个字符:
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