期望从输出中获取指定信息

时间:2018-06-19 17:32:14

标签: bash tcl expect

我正在尝试构建一个脚本来收集我们思科设备的信息。我正在使用bash并调用Expect以将命令发送到设备。我能够发送命令并通过log函数获取输出。 我想做的就是获取“序列号:SERIAL_NUMBER”行的输出

这是我到目前为止所拥有的:

/usr/bin/expect << EOF
set timeout 5
spawn ssh $Username@$IP ena\r$Password\rshow version \rexit\r
expect "password"
send "$Password\r"
expect -re {^[Serial Number: ].+}
puts "S/N: $expect_out(4,string)"
expect "*#"
expect eof
EOF

我收到以下错误:

S/N: (4,string)
expect: spawn id exp4 not open

我尝试使用其他spawn_ID仍然出现相同的错误。我不确定100%tcl的工作原理,是否有人可以帮助我。

干杯

1 个答案:

答案 0 :(得分:0)

我怀疑问题是这样的:

expect -re {^[Serial Number: ].+}
puts "S/N: $expect_out(4,string)"

它应该是:

expect -re {^[Serial Number: ](.+)}
puts "S/N: $expect_out(1,string)"

我在正则表达式中放置了一个“捕获组”,然后选择该组以进行expect_out(1,string)打印,因为它是此类捕获组的 first 。它们从1开始编号(因为零是整个匹配的字符串,通常在使用Expect时不需要)。


当然,这假定代码完全正常。如果连接的另一端决定告诉您离开,则期望脚本将失败。您应该为期望打开调试模式,并确切了解正在发生的情况。您应该绝对查看该问题的答案以找到调试方法。

Expect Scripting Logging not finishing