【问题标题】:I can't get expect to work with a specific string [duplicate]我不能期望使用特定的字符串[重复]
【发布时间】:2020-02-19 19:25:30
【问题描述】:

我正在编写一个 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

我对期望和正则表达式不是很熟悉,但“[^:]*”对我来说直到现在也适用于类似的字符串。

我没有成功尝试过这些:

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

提前感谢您的建议!

【问题讨论】:

  • 总是转义特殊的正则表达式元字符(它们在括号表达式内部或外部使用时会有所不同)。 ? 是您模式中的其中之一

标签: regex bash ssl openssl expect


【解决方案1】:

问题可能是您以

开头的正则表达式
Sign the certificate? ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 2016-08-04
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 2012-02-07
    • 2011-06-21
    • 2015-06-10
    相关资源
    最近更新 更多