【问题标题】:Expect get specify information from output期望从输出中获取指定信息
【发布时间】:2018-06-20 17:55:31
【问题描述】:

我正在尝试构建一个脚本来收集我们的思科设备的信息。我正在使用 bash 并调用 Expect 以向设备发送命令。我能够发送命令并通过日志功能获取输出。 我想做的是获取“序列号: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 是如何工作的,所以如果有人可以帮助我的话。

干杯,

【问题讨论】:

    标签: bash tcl expect


    【解决方案1】:

    我怀疑问题是这样的:

    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) 选择该组进行打印,因为它是第一个这样的捕获组;它们从一开始编号(因为零是整个匹配的字符串,在使用 expect 时通常不需要)。


    当然,这假设代码完全可以工作。如果连接的另一端决定告诉你离开,expect 脚本将会失败。你应该打开调试模式来期待,看看到底发生了什么。您应该肯定查看此问题的答案以了解调试方法。

    Expect Scripting Logging not finishing

    【讨论】:

    • 正则表达式没问题。我已经使用在线 REGEX 模拟器对其进行了测试。
    猜你喜欢
    • 2021-04-16
    • 2015-01-21
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 2016-12-13
    • 2012-10-01
    • 1970-01-01
    • 2017-07-19
    相关资源
    最近更新 更多