我正在尝试使用bash中的脚本自动执行某些诊断,这些脚本调用我没有亲自编写的程序/脚本。许多脚本都有基于案例切换和读取按键的菜单,使用脚本可以很容易地输入菜单选项,如下所示:
sh foo.sh <<EOF
0
0
1
EOF
但是,我有一个特殊菜单似乎没有在案例开关上操作,而是强迫用户使用箭头键选择用&#39; x&#39;表示的选项,然后是[输入]键。
当我尝试输入上述选项时,菜单会锁定,我必须按ctrl + alt + del重新启动此系统。似乎唯一注册的是新行&#39;,它会推进菜单,但仅限于菜单中的第一项。我已经为箭头键,数字,字母等尝试了各种转义序列,但无济于事。我不知道如何创建一个按箭头键操作的菜单,所以我没有基础来解决这个问题。
为了简化这一点,我需要一种方法来选择这种类型的菜单(无论它是什么类型),以帮助防止在必须重复进行简单任务时发生的指法,并且不存在任何反馈确保正确选择,直到完成4小时测试后。
编辑:为了澄清,这是在恢复模式下运行的旧版Ubuntu。经过详细审查的程序/脚本是一种专有诊断,它被严格锁定,并且具有未确定的类型或来源。
我希望从这里获得的是,即使不是解决方案,也是朝着正确方向发展的领导者。根据建议,我正在研究expect / autoexpect以及tput。
更新:经过一番调查,我发现这实际上是一个可执行文件。我不知道这是否澄清了我的问题,或者说我想做的事情是不切实际的,我会让大师们决定。至少,我知道我完全偏离尝试以我最初尝试的方式输入输入。
答案 0 :(得分: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)