我在远程Linux主机上运行了基于文本的菜单。我正在使用期望ssh到这个主机,并想弄清楚如何与菜单进行交互。交互涉及向上,向下和使用输入和后退箭头键。例如,
Disconnect
Data Collection >
Utilities >
Save Changes
进入系统时,突出显示“断开连接”。因此,只需按两次输入即可断开与系统的连接。第二次输入确认断开连接。
以下代码将进入我的系统并调出菜单。如果我删除期望的eof并尝试发送“\ r \ n”,认为这会选择Disconnect菜单选项,我会收到以下错误:“write()无法写入任何内容 - 将睡眠(1)并重试...”< / p>
#!/usr/bin/expect
set env(TERM) vt100
set password abc123
set ipaddr 162.116.11.100
set timeout -1
match_max -d 100000
spawn ssh root@$ipaddr
exp_internal 1
expect "*password:*"
send -- "$password\r"
expect "Last login: *\r"
expect eof
我查看了virterm和term_expect示例,但无法弄清楚如何调整它们以便为我工作。如果有人能指出我正确的方向,我会非常感激。我需要知道的是,我可以与基于文本的菜单系统进行交互吗?这样做的正确方法是什么,如果有任何存在的例子会很棒。
感谢, -reagan
答案 0 :(得分:1)
尝试使用autoexpect
工具记录交互式会话,并查看代码的外观。
答案 1 :(得分:1)
为了简化您的生活,您可能需要设置公钥加密,以便您可以在不使用密码的情况下ssh到远程主机。然后你可以集中精力测试你的软件而不是ssh。谷歌“没有密码的ssh登录”获取更多信息。你会发现说明是直截了当的,所以不要害怕。
答案 2 :(得分:0)
你试过\ n \ n \ r?