如何处理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功能中的长按按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理Android导航栏菜单键上的长按?

如何处理 bash 脚本读取的 CSV 文件中的逗号

如何处理 PHP 请求中的长标头声明?

如何处理 SQL 中的长比较

如何处理 mongo 脚本中的命令行参数?

android 长按事件 和 长按弹出上下文菜单如何处理