我正在尝试构建一个脚本来收集我们思科设备的信息。我正在使用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的工作原理,是否有人可以帮助我。
干杯
答案 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时不需要)。
当然,这假定代码完全正常。如果连接的另一端决定告诉您离开,则期望脚本将失败。您应该为期望打开调试模式,并确切了解正在发生的情况。您应该绝对查看该问题的答案以找到调试方法。