如何抑制错误读取功能的回声

如何抑制错误读取功能的回声

我试图在 shell 脚本中捕获按键(例如使用read)而不是回显它。我发现的三种方法是stty -echo-s交换机和流重定向。

然而,在似乎使用 FreeBSD 实现的 macOS 上,这些都不能一致地工作。

以下脚本显示了该问题:

while true; do
    stty -echo
    read -s -n 1 CHAR &>/dev/null
    stty echo
done

同时按下向上和向下箭头时,有时会出现命令回显A^[[B或 的情况B^[[A。当机器速度缓慢(由于电池电量不足)时,这种情况尤其常见,表明存在某种竞争状况。

我错过了什么吗?否则,我该如何解决这个问题?

答案1

在循环中,循环末尾的“stty echo”与下一次迭代的“stty -echo”之间有一个很短的时间窗口。在此窗口期间接收到的键盘输入将被回显,即使没有读取命令正在等待它。如果你不想要回声,就不要调用“stty echo”

相关内容