我在Linux服务器上编写Expect脚本的过程中,该服务器应该telnet到路由器以收集一些系统信息。到目前为止,我的脚本可以成功建立连接,运行路由器命令,断开连接并终止。
该命令显示了我需要解析的几行,我不确定在Expect中该怎么做。如何保存输出,grep一行,然后是行中的一列,最后将结果保存到文件中?如果可能的话,我想完全使用Expect而不是解决方法(例如Expect嵌入Bash)。
感谢您的时间。 jk04
答案 0 :(得分:7)
期望发展的两个提示:
autoexpect
为您的自动化设置框架exp_internal 1
详细说明了内部的期望。当你无法弄清楚为什么你的正则表达式没有捕捉到你期望的东西时,这个是必不可少的。答案 1 :(得分:6)
对于字符串操作,您可以简单地使用tcl的内置[2] [3]。
答案 2 :(得分:4)
我遇到并解决了与bash交互的类似问题。我相信这种方法可以推广到任何其他提供无操作,固定字符串输出的交互式环境。
基本上,我用两个固定字符串包装命令,然后在开头和结尾搜索包含这些字符串的模式,并将内容保存在它们之间。例如:
set var "";
expect $prompt { send "echo PSTART; $command; echo PEND;\r"; }
expect {
-re PSTART\r\n(.*)PEND\r\n$prompt { set var [ string trim $expect_out(1,string) ]; send "\r"; }
-re $prompt { set var "" ; send "\r"; }
timeout { send_user "TIMEOUT\n"; exit }
}
我怀疑这种方法也适用于shell的注释字符,或者是一个返回已知输出的简单状态命令。
然后你可以用'var'的内容做任何你需要的事。