【问题标题】:Scripting item selection in menu that uses arrows使用箭头的菜单中的脚本项选择
【发布时间】:2014-01-23 16:21:16
【问题描述】:

我正在尝试使用 bash 中的脚本来自动化一些诊断,这些脚本调用我没有亲自编写的程序/脚本。许多脚本都有基于大小写切换和读取按键的菜单,这使得使用脚本输入菜单选择变得简单,如下所示:

sh foo.sh <<EOF
0
0
1
EOF

但是,我有一个特定的菜单似乎没有在大小写开关上运行,而是强制用户使用箭头键选择一个带有“x”的选项,然后按 [Enter] 键。

当我尝试输入上述选项时,菜单被锁定,我必须按 ctrl+alt+del 重新启动该系统。唯一似乎注册的是“新行”,它推进了菜单,但仅在菜单中的第一项上。我尝试了箭头键、数字、字母等的各种转义序列,但无济于事。我不知道如何创建一个在箭头键上操作的菜单,所以我没有解决这个问题的基础。

为了简化这一点,我需要一种方法来将选择输入到这种类型的菜单中(无论它是什么类型),以帮助防止在必须重复执行简单任务且不存在反馈时出现的胖手指以确保在完成 4 小时测试之前正确选择。

编辑:为澄清起见,这是在恢复模式下运行的旧版本 Ubuntu。受到审查的程序/脚本是一种专有诊断,它被完全锁定,类型或来源未定。

我希望从这里得到的,即使不是解决方案,也是朝着正确方向前进的方向。根据建议,我正在研究 expect/autoexpect 以及 tput。

更新:经过更多调查,我发现这实际上是一个可执行文件。我不知道这是否澄清了我的问题,或者使我试图做的事情变得不切实际,我会让大师们决定。至少,我知道我在尝试以我最初尝试的方式输入输入时完全偏离了轨道。

【问题讨论】:

  • +1 个有趣的问题!我正在寻找大师们的建议。祝你好运。
  • 调查expectautoexpect
  • 你能提供更多关于这个菜单的信息吗?是脚本吗?你在运行什么操作系统?为什么不能使用kill 而不是按ctrl+alt+del?你是如何运行它的(终端、ssh 或其他)?
  • @SirAthos,这是在恢复模式(控制台)下运行的旧版本的 ubuntu,大多数脚本在 bash 中运行。我无法确定有关程序/脚本的很多信息,因为它是由第 3 方提供的接口。它是一种专有诊断,这意味着向客户询问更多信息可能会给我一个解决方案,或者它可能会进一步拉/锁定诊断(公司对这样的 IP 很有趣)。此外,kill 不起作用,因为当我向其提供脚本时界面锁定(就像 ctrl+z 不会中断的无限循环。

标签: bash shell executable sh


【解决方案1】:

也许tput 可以提供帮助。它使用终端功能(查看man terminfo)发送您需要的键码。 例如:tput kcub1 发送终端上左箭头键的键码。

借此,您有机会通过以下方式实现目标

sh foo.sh <<EOF
0
0
$(tput kcub1)
1
$(tput kcud1)
EOF

(这会将“0 0 [left] 1 [down]”发送到 foo.sh)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2014-05-24
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多