如何处理bash脚本的waitkey功能中的长按按钮?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何处理bash脚本的waitkey功能中的长按按钮?相关的知识,希望对你有一定的参考价值。
我正在bash脚本中实现“ waitkey”功能,该功能等待用户按下键盘上的按钮以继续。
但是,由于不同的人有不同的按习惯,所以当人们长时间按一个按钮时,我的脚本总是将此长按视为多次单独的按。
waitkey() {
read -n 1 -s -r -p "Press any key to continue"
}
是否可以通过这种方式修改我的代码:对于两次单独单击之间的间隔必须大于2秒,这样,如果一次按下按钮1.5秒钟,则长按不会被视为两次单独单击。
答案
编辑:此超级用户答案可以帮助您在等待按键之前清除输入:https://superuser.com/a/622205
要做您想做的事,您要么必须:
- 在读取用户输入之前禁用重复按键。
或
- 在接受新输入之前检测KeyUp事件。
简短的答案:这在Shell中是不可能的。
答案很长:这几乎是不可能的,而且肯定不能移植。
[由于控制台和终端的工作方式,没有任何方法可以在任何Unix tty控制台环境中处理keydown和keyup事件,而在Bash中则无法处理。
终端tty设备仅处理字符流。
执行脚本要求的操作需要对键盘设备的低级别访问。
有一些方法可以在本地进行,但是绝对不容易,它依赖于X-Window协议或对键盘设备的本地和特权访问。
我发现了这个详细的博客文章,如果您想了解更多原因,那么为什么在Linux上很难检测到KeyUp事件,可以阅读:
https://blog.robertelder.org/detect-keyup-event-linux-terminal/
以上是关于如何处理bash脚本的waitkey功能中的长按按钮?的主要内容,如果未能解决你的问题,请参考以下文章