默读一个字符一个字符是行不通的

默读一个字符一个字符是行不通的

我试图默默地逐个字符地读取用户输入,如下所示:

而[1];做
  读取-s -N 1
  ...
完毕

虽然此循环使用 VNC ( xterm) 可以完美运行,但它只能部分使用 putty (xterm) 或 Linux 终端以及大多数其他文本终端。

当我对键盘变得“狂野”并同时敲击多个键时,就会遇到问题,并且比尽管使用 -s 模式,某些按键仍会回显

我还尝试过重定向输出和stty -echo.虽然第一个没有任何区别,但后者会在某种程度上有所帮助,最大限度地减少“回声”的频率,但并不完美。

有任何想法吗?

答案1

read -secho仅在该命令执行期间禁用终端read。因此,如果您在两个命令之间输入某些内容read,终端驱动程序会将echo其返回。

您应该禁用echo然后read在循环中调用而不使用-s

if [ -t 0 ]; then
  saved=$(stty -g)
  stty -echo
fi
while read -rN1; do
  ...
done
if [ -t 0 ]; then
  stty "$saved"
fi

相关内容