我无法期望使用特定的字符串
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,这与输入中的真实 ?
字符不匹配。要从 ?
中删除特殊含义,请在其前面加上反斜杠 \?
,或使用 .
更松散地匹配任何字符。请注意,您在以下行中也有同样的问题。
我正在编写 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,这与输入中的真实 ?
字符不匹配。要从 ?
中删除特殊含义,请在其前面加上反斜杠 \?
,或使用 .
更松散地匹配任何字符。请注意,您在以下行中也有同样的问题。