Expect脚本中匹配[yes/NO]:的正则表达式失效问题排查
expect正则匹配[yes/NO:]失败的原因分析
在使用expect自动处理easyrsa init-pki的交互时,第二个规则失效的问题,根源出在正则表达式的语法错误上:
原规则中的-re {[yes/NO]:},这里的[]是正则表达式的特殊元字符,用来定义「字符集合」——它会被解释为匹配y、e、s、/、N、O中的任意单个字符,再加上冒号。但实际控制台输出的是完整的[yes/NO]:字符串(包含方括号),所以这个正则根本匹配不到目标内容。
修正方案
有两种可行的解决方式:
- 转义正则中的方括号:把方括号用反斜杠转义,让正则把它们当作普通字符匹配:
expect { -re {Confirm removal:} {send "yes\r" ; exp_continue} -re {\[yes/NO]:} {send "yes\r" ; exp_continue} }
- 改用精确字符串匹配:因为这个提示是固定的,不需要正则,直接用字符串匹配更可靠(注意要包含前面的空格):
expect { -re {Confirm removal:} {send "yes\r" ; exp_continue} " [yes/NO]: " {send "yes\r" ; exp_continue} }
内容的提问来源于stack exchange,提问作者stackbiz
相关产品推荐
相关产品推荐

