bash tty输入消耗(或冲洗?)(再次)

时间:2019-02-27 09:14:24

标签: bash input flush

我搞砸了我先前的问题,不知道如何解决,请主持人压制它。 我在这里以更容易理解的简单形式询问我的问题。

在从bash向终端仿真器发出查询/答复序列之前,如何耗尽stdin上的任何类型。

下面的演示在脚本中模拟了命令循环,读取了用户“命令”,执行此操作(此处为睡眠),然后“希望”查询/回复终端仿真器(此处要求输入术语ID,但是您可以想象终端仿真器会接受的任何类型的查询),因此在查询/回复之前,我们必须先清空任何类型的查询。在这里,我尝试读取直到为空。

这是脚本

#!/bin/sh
read -s -dc -p $'\e[0c' gr # The good query reply 

typeset -i i=0 n=30
while((i<n))
do
  read -p "cmd: "  c          # Read user command
  sleep 1                     # emulate user command that takes time
  echo "cmd '$c' done"
  while read -s -n 1 -t .1 a  # drain type ahead
  do [ "$a" = "" ] && break;
  done
  read -s -dc -p $'\e[0c' r  # emit a terminal query and read reply.
  [ "$r" != "$gr" ] && echo "Got corrupted reply '$r' '$gr'"
  ((i++))
done

运行时,在提示符“ cmd:”处输入一个缓慢的字符,然后等待下一个提示。

使用bash BASH_VERSION ='4.4.19(1)-release'和两个mate-terminal或xterm我都知道了

TC$ ./t.sh
cmd: a
cmd 'a' done
cmd: a
cmd 'a' done
cmd: a
cmd 'a' done
cmd: 

在键入更快的字符(不等待提示)时,我在sdtin上输入了一些预输入字符,尽管我很少尝试消耗输入,我还是得到了。

TC$ ./t.sh
cmd: a
a
a
a
acmd 'a' done
Got corrupted reply 'a
a
a
md: 
a
a
cmd '' done
Got corrupted reply 'a

有人建议如何在这种bash应用程序中消耗输入吗? 干杯

0 个答案:

没有答案