bash - 期望从输出中获取指定信息
问题描述
我正在尝试构建一个脚本来收集我们的 Cisco 设备的信息。我正在使用 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 是如何工作的,所以如果有人可以帮助我。
干杯,
解决方案
我怀疑问题是这样的:
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 脚本将会失败。你应该打开调试模式来期待,看看到底发生了什么。您绝对应该查看此问题的答案以了解调试方法。
推荐阅读
- asp.net-mvc - RDLC 错误和 NuGet 管理器无法正常工作
- javascript - 函数返回带有许多小数位的奇数答案之间的天数
- java - 如何查看一般情况?
- c++ - 模板类 std::valarray 的推演指南
- python - django + celery:为一名工作人员禁用预取,有错误吗?
- javascript - 为什么 Google Page Speed Insights 说要缩小 JS
- android - 房间交界处 Pojo
- google-data-studio - 从 Data Studio 计算字段的计算中排除 Null
- python - 基本的 ansible 自定义模块,触摸文件
- macos - macOS 钥匙串 ACL 如何确定哪些应用程序可以访问?