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

I can't get expect to work with a specific string

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

在我必须签署证书之前,该脚本运行良好。事实上,我无法让我的 expect 命令匹配接收到的字符串。

这是我终端的字符串 returns :

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+]

提前感谢您的建议!

问题可能是您以

开始正则表达式
Sign the certificate? ...

? 是一个特殊的模式字符,表示 0 或 1 次 ,因此在这种情况下,您匹配字母 e 0 或 1次。它将进行匹配,但随后您的正则表达式继续使用 space,这与输入中的真实 ? 字符不匹配。要从 ? 中删除特殊含义,请在其前面加上反斜杠 \?,或使用 . 更松散地匹配任何字符。请注意,您在以下行中也有同样的问题。