Linux 抑制期望输出

Linux 抑制期望输出,linux,bash,shell,unix,expect,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 |

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

#!/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“显示bgp vrf IKA摘要|包括10.155.192.50\n”&>/dev/null


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

您会看到额外的一行,因为您在
发送“show…”
之前发出了命令
log\u user 1
,这会导致
“show…”
的回声被记录到stdout。如果您在
发送之后将此命令移动一行,并通过添加
expect“\n”
等待回显完成,则您将看到较少的:

expect "#"
send "show bgp vrf IKA summary | include 10.155.192.50\n"
expect "\n"
log_user 1
expect "#"
注意,模式开头的
*
全局字符没有任何作用


或者,与其更改
log\u user
,不如考虑使用变量
$expect\u out(buffer)
,该变量包含与模式匹配的内容。

关于
expect/the/script.exp | tail-n2
,这很有用,但对我不起作用。。由于以上代码中有更多用于其他设备的输出。请更新您的问题以说明您的实际需求。Expect不理解
&>/dev/null
。谢谢,这从输出中清除了send命令。。但它显示运行命令的设备的主机名。在最后一行
RP/0/RSP0/CPU0:cap-s12a-core-rtr1#[root@cap-nwmon-01 anand]#
由于您只想查看回复的前两行,而不想查看命令提示符
#
,因此可以将查找提示的
expect“#”
替换为,例如,
expect-gl”\n*\n“
,这是两行新行。(使用
-gl
选项是为了确保expect理解字符串是一种全局模式,因为在此上下文中带有
\n
的字符串可能会被误解)。还有一个疑问。。假设我的输出有3行,如何编写expect-glad另一个
*\n
来匹配任何字符,然后换行:
expect-gl“\n*\n*\n”