抑制期望输出

Suppress expect output

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

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

也许尝试重定向不需要的输出,例如

send "show bgp vrf IKA summary | include 10.155.192.50\n" &> /dev/null

将其 stdout 和 stderr 重定向到遗忘的虚无

您看到额外的行是因为您在 send "show..." 之前给出了命令 log_user 1,这导致 "show..." 的回显被记录到标准输出。如果您稍后将此命令移动一行,在 send 之后,并通过添加 expect "\n" 等待回显完成,那么您将看到更少:

expect "#"
send "show bgp vrf IKA summary | include 10.155.192.50\n"
expect "\n"
log_user 1
expect "#"

请注意,模式开头的 * glob 字符没有任何作用。

或者,您应该考虑使用变量 $expect_out(buffer),而不是更改 log_user,它保存与模式匹配的内容,包括在内。