如何在 Expect 脚本中使用变量作为期望值(expect -re regex)
How can I use a variable as an expect value in an Expect script (expect -re regex)
我有一个 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 中,您使用双引号括起 "word" 允许变量和命令替换;您使用大括号括起不允许替换的单词(如 shell 中的单引号)。
只需删除 $regex 值中的大括号即可。
我有一个 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 中,您使用双引号括起 "word" 允许变量和命令替换;您使用大括号括起不允许替换的单词(如 shell 中的单引号)。
只需删除 $regex 值中的大括号即可。