【发布时间】:2023-03-30 21:55:01
【问题描述】:
我编写了一个期望脚本来验证我在 cisco 路由器上是否有静态路由。我需要输出行全部出现在同一行,即使变量匹配多行
下面的命令是针对cisco设备的:
example1#sh run | i ip route
ip route 169.254.0.1 255.255.255.255 Dialer1
ip route 169.254.0.2 255.255.255.255 Dialer2
example1#
这里是期望脚本:
set hostname "example1"
set model "cisco1841"
send "sh run \| i ip route\r" ; sleep 5
expect {
-re {\r\nip\s+route.*} {
set route "$expect_out(0,string)"
set f [open file.csv a]
puts -nonewline $f $hostname,$model,$route
puts $f "\r"
close $f
}
timeout {
set route "no static route"
set f [open file.csv a]
puts -nonewline $f $hostname,$model,$route
puts $f "\r"
close $f
}
}
这里是变量$route
ip route 169.254.0.1 255.255.255.255 Dialer1
ip route 169.254.0.2 255.255.255.255 Dialer2
example1#
验证输出文件,这不是我所期望的。参数“-nonewline”不起作用。该文件总是换行。
这里是输出文件:
example1,cisco1841,ip route 169.254.0.1 255.255.255.255 Dialer1
ip route 169.254.0.2 255.255.255.255 Dialer2
example1#
我做了一个测试,问题是因为变量在行尾不会有'\n\r'。
测试 - NOK
set route "ip route 169.254.0.1 255.255.255.255 Dialer1
ip route 169.254.0.2 255.255.255.255 Dialer2
example1#"
测试 - 确定
set route "ip route 169.254.0.1 255.255.255.255 Dialer1 \
ip route 169.254.0.2 255.255.255.255 Dialer2 \
example1#"
输出文件正常
example1,cisco1841,ip route 169.254.0.1 255.255.255.255 Dialer1 ip route 169.254.0.2 255.255.255.255 Dialer2 example1#
如何使用 expect 为每个设备匹配多行并将输出保存在同一行?
【问题讨论】: