我试图默默地逐个字符地读取用户输入,如下所示:
而[1];做 读取-s -N 1 ... 完毕
虽然此循环使用 VNC ( xterm
) 可以完美运行,但它只能部分使用 putty (xterm) 或 Linux 终端以及大多数其他文本终端。
当我对键盘变得“狂野”并同时敲击多个键时,就会遇到问题,并且比尽管使用 -s 模式,某些按键仍会回显。
我还尝试过重定向输出和stty -echo
.虽然第一个没有任何区别,但后者会在某种程度上有所帮助,最大限度地减少“回声”的频率,但并不完美。
有任何想法吗?
答案1
read -s
echo
仅在该命令执行期间禁用终端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