我有以下脚本登录到路由器并执行命令。我怎么能只完成输出而不显示任何其他内容。
#!/usr/bin/expect -f
set timeout 3000
log_user 0
spawn ssh -o StrictHostKeyChecking=no ananair@172.20.60.187
expect {
"*assword:" {
send "anismi@123\n"
expect "*#"
log_user 1
send "show bgp vrf IKA summary | include 10.155.192.50\n"
expect "*#"
}
}
这是上述脚本的输出。
[root@cap-nwmon-01 anand]# ./migrate.sh
show bgp vrf IKA summary | include 10.155.192.50
Sun Feb 25 07:17:25.150 EET
10.155.192.50 0 65256 3107179 4237248 1624156 0 0 5d17h 322
这是我希望从这个脚本中获得的唯一输出。
Sun Feb 25 07:17:25.150 EET
10.155.192.50 0 65256 3107179 4237248 1624156 0 0 5d17h 322
答案 0 :(得分:1)
您会看到额外的行,因为您在log_user 1
之前发出了命令send "show..."
,这会导致"show..."
的回显记录到stdout。如果您稍后在send
之后移动此命令一行,并等待通过添加expect "\n"
来完成回声,那么您将看到更少:
expect "#"
send "show bgp vrf IKA summary | include 10.155.192.50\n"
expect "\n"
log_user 1
expect "#"
注意,模式开头的*
glob字符没有用处。
或者,您应该考虑使用变量log_user
来保存与模式匹配的内容,而不是更改$expect_out(buffer)
。