抑制期望输出

时间:2018-02-25 05:27:23

标签: linux bash shell unix expect

我有以下脚本登录到路由器并执行命令。我怎么能只完成输出而不显示任何其他内容。

#!/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

1 个答案:

答案 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)