如何在Bash中用Expect自动化带空格键选择的DIALOG交互
解决方案
你的问题核心是发送空格的时机不对,固定sleep 1无法保证对话框完全加载,且没有匹配对话框的特征文本就发送输入,导致空格没被正确接收。以下是修正后的实现:
修正后的脚本
#!/bin/bash /usr/bin/expect << 'HEREDOC' spawn /opt/eri_sn/sbin/foo.bar # 等待对话框出现的特征文本(替换成你实际界面中出现的提示,比如"Select option with SPACE") expect "Press SPACE to select" # 发送空格选中目标选项 send -- " " # 等待确认提示(替换成实际的确认文本,比如"Press ENTER to proceed") expect "Press ENTER to continue" # 发送回车确认 send -- "\r" expect eof HEREDOC
关键调整说明
替换固定sleep为特征文本匹配
系统负载波动会导致sleep 1不够用,用expect "特征文本"可以精准等待对话框加载完成后再发送输入,避免时机过早。正确发送空格
用send -- " "或send -- { }都能发送空格,确保没有多余转义字符。如果需要选中多个选项,可重复写send -- " "。调试方法
如果你不知道对话框的特征文本,用调试模式查看交互过程:/usr/bin/expect -d << 'HEREDOC' spawn /opt/eri_sn/sbin/foo.bar expect eof HEREDOC运行后会输出详细的接收日志,从中找到对话框出现时的关键字符串,替换到脚本的
expect语句中即可。
内容的提问来源于stack exchange,提问作者user27192874
相关产品推荐
相关产品推荐

