gpt4 book ai didi

linux - 如何在 Expect 脚本中使用变量作为期望值(expect -re regex)

转载 作者:太空宇宙 更新时间:2023-11-04 11:46:11 24 4
gpt4 key购买 nike

我有一个 expect 脚本,我并不总是知道输出,也不想对给定命令返回的预期输出进行硬编码,而是将预期输出的一部分作为命令行变量传递。然后我想使用预期的输出作为正则表达式的一部分进行验证。

我查看了几个示例,只能看到 cli vars 与 send 命令一起使用,而不是与 expect -re 命令一起使用。

#!/usr/bin/expect

set output [lindex $argv 0]
set host [lindex $argv 1]

set regex "{(?n)^${output}.*}"
puts $regex

set timeout -1

spawn ssh root@$host
expect -re {(?n)^Password.*}

send "myPassword\n"
expect -re $regex

expect eof

输出

Password: couldn't compile regular expression pattern: quantifier operand invalid
while executing
"expect -re $regex"

预计正则表达式应作为输出 cli 变量中设置的值进行处理。

请注意:当值被硬编码时,脚本会按预期工作

最佳答案

正则表达式中的大括号是量词语法。例如,要找到 3 个“a”,您可以使用 a{3}

您对 $regex 变量的赋值包含文字大括号

set regex "{(?n)^${output}.*}"

expect 是 Tcl 语言的扩展:在 Tcl 中,您使用双引号括起一个“单词”,允许变量和命令替换;您使用大括号括起一个不允许替换的单词(就像 shell 中的单引号)。

只需从 $regex 值中删除大括号即可。

关于linux - 如何在 Expect 脚本中使用变量作为期望值(expect -re regex),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com