我已经编写了一个小型的Expect脚本来登录到思科设备;一旦登录,我想反复运行命令并输出grep
。Mixing Expect和BASH
#!/usr/bin/expect
send_user "Device name: "
expect_user -re "(.*)\n"
set host $expect_out(1,string)
send_user "Username: "
expect_user -re "(.*)\n"
set user $expect_out(1,string)
stty -echo
send_user -- "Password: "
expect_user -re "(.*)\n"
set pass $expect_out(1,string)
stty echo
send_user "show int "
expect_user -re "(.*)\n"
set intf $expect_out(1,string)
send_user "\n"
spawn telnet $host
expect "Username:"
send "$user\r"
expect "Password:"
send "$pass\r"
expect ">"
此时我们已经登录到设备,我想重复执行命令“show int xxx”,并为特定行输出grep。 grep
不在预期中,也不是像sleep
这样的命令,所以我可以循环执行我的特定行中的show int
命令,grepping
。我如何将Expect和Bash混合在一起?
UPDATE:我现在已经完成了这个脚本,一旦我完成了这个最后的障碍,我会发布完整的脚本。一行set bytesnow [exec grep "packets input" \< showint | cut -d \ -f 9]
正在抛出错误;
child process exited abnormally
while executing
"exec grep "packets input" < \showint | cut -d \ -f 9"
但它在我写的测试脚本中正常工作。文件./showint在那里,在命令行上运行该命令工作正常?我无法弄清楚什么是错的?
UPDATE:更多的调查(http://wiki.tcl.tk/8489)已经表明我,grep
退出时的状态码1,这意味着没有模式匹配被发现了,把命令从工作就好命令行?即使使用/ full/path/to/showint。
END:我解决了我的错误,意识到我过去的傻子,下面回答。感谢所有您的帮助:d
哈!错误,纠正,欢呼;) – jwbensley 2012-02-16 23:42:49
好吧,它看起来像你正在寻找字段9在'路由器#sh int |我将数据包输入字段用空格作为分隔符。我只在输出中看到8个字段。你能告诉我们你想完成什么吗? '798518177数据包输入,60933723489字节,0无缓冲区' –
resmon6
2012-02-17 00:24:52
我使用了“-f 9”,因为交换机/路由器上的输出线在开始处有几个空格来缩进该行。我正在尝试按照该行输出的字节值工作。在底部查看我的答案。谢谢:) – jwbensley 2012-02-17 01:02:56