我无法期望使用特定的字符串

问题描述 投票:0回答:1

我正在编写bash脚本以创建自签名证书。

该脚本运行良好,直到我必须签署证书为止。确实,我无法获得我期望的命令来匹配接收到的字符串。

这是我的终端返回的字符串:

Sign the certificate? [y/n]:

这是我的命令:

/usr/bin/expect <<EOD
spawn sudo openssl ca -config CA/ca.cnf -policy policy_anything -out CA/newcerts/webserver.cert -infiles CA/certrequests/webserver.csr
expect {Enter pass phrase for ./CA/private/cakey.pem:} {send "${PEMpassword}\n"}
expect -re {Sign the certificate? [^:]*:} {send "y\n"}
expect -re {1 out of 1 certificate requests certified, commit? [^:]*:} {send "y\n"}
expect eof
EOD

我对Expect和regex不太熟悉,但是“ [^:] *”直到现在对我来说都适用于类似的字符串。

我没有尝试过那些:

[?*]
\*
?:
[y/n]
\[y/n\]
"[y/n]"
[\w/\w]
[w+]
[\w+]

感谢您的建议!

regex bash ssl openssl expect
1个回答
0
投票

问题可能是您以]开始正则表达式>

Sign the certificate? ...

但是?是特殊图案字符,表示0或1次

,因此在这种情况下,您将字母e匹配0或1次。它将完成匹配,但是您的正则表达式将以空格继续,该空格与输入中的实际?字符不匹配。要从?中删除特殊含义,请在其前面加上反斜杠\?,或使用.更加宽松地匹配任何字符。注意,您在下一行上也遇到相同的问题。
© www.soinside.com 2019 - 2024. All rights reserved.