问题
我正在使用Bash 5,有一个长时间运行的循环,需要偶尔检查用户可能按下的各种键。我知道如何使用 stty
来实现这一点 - 请参见我下面的答案 - 但它比应该更丑陋。
基本上,我正在寻找一种简洁的方法来实现这一点:
keyhit-p() {
if "read -n1 would block"; then
return false
else
return true
fi
}
非解决方案: read -t 0
我已经阅读了 bash
手册,知道了 read -t 0
命令。但它并不能满足我的要求,即检测是否有任何输入可用。相反,它只会在用户按下 ENTER 键(完整的一行输入)时返回 true。
例如:
while true; do
if read -n1 -t0; then
echo "This only works if you hit enter"
break
fi
done
trap EXIT 'stty sane'
,但这对用户的终端做出了不总是有效的假设。 - hackerb9