【问题标题】:How do I read any one key in Bash?如何读取 Bash 中的任何一个键?
【发布时间】:2012-07-21 21:42:16
【问题描述】:

我可以通过read -n 1 KEY 获取大多数键,但由多个字符表示的键除外。例如,如果我按向上箭头键:

$ read -n 1; echo
^[[A
$ [A

如您所见,read 只接受 Esc 而剩下的 [A

我希望能够在脚本中做的是:

  1. 使用箭头键浏览列表,然后按 Enter 对其进行操作
  2. 对于其他操作,请按不同的键。

【问题讨论】:

标签: bash keyboard


【解决方案1】:

你最好使用上面提到的 jm666 的对话框,但是还有其他方法可以给猫剥皮。

read -n 1 x; while read -n 1 -t .1 y; do x="$x$y"; done

基本上等到你读到一个字符,然后旋转消耗输入,直到 0.1 秒没有输入。

警告,快速打字员可能会生气。您可能需要调整该超时。

【讨论】:

  • @bi99l35:我猜 2400 波特的拨号连接很少见,所以应该是安全的。
  • 复制粘贴一些文本时仍然不好。然后没有超时足够快来检测到这一点。我们应该使用 terminfo 来确定我们手头是否有一个多字节按键。
  • 当字符是 Enter 或 Space 或 Tab 时,这对我 (linux) 不起作用。不过,它确实适用于 Backspace 甚至 Esc。
【解决方案2】:

不是直接回答您的问题 - 而是解决方法:

您可能应该检查“对话框”实用程序以从外壳创建“ncurses”(面向屏幕)对话框。见:http://hightek.org/dialog/

Google 提供一些示例,或查看:http://unstableme.blogspot.sk/2009/12/linux-dialog-utility-short-tutorial.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 2022-11-18
    • 1970-01-01
    • 2022-09-23
    • 2016-12-26
    • 2023-03-17
    • 2021-03-20
    相关资源
    最近更新 更多