期望与模式不正确匹配

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

我试图通过期望自动生成easyrsa请求。我想出了那个bash脚本:

#!/bin/bash

firstname=$1
lastname=$2
mail=$3
department=$4
password=$5
[...]

cd /VPN-CA/

/usr/bin/expect -c "
    spawn ./easyrsa gen-req $mail
    expect \"Enter PEM pass phrase:\"
    send \"$password\r\"
    expect \"Verifying - Enter PEM pass phrase:\"
    send \"$password\r\"
    expect \"Country Name (2 letter code) \[DE\]:\"
    send \"\r\"
    expect \"State or Province Name (full name) \[MyState\]:\"
    send \"\r\"
    expect \"Locality Name (eg, city) \[MyCity\]:\"
    send \"\r\"
    expect \"Organization Name (eg, company) \[MyOrganization\]:\"
    send \"\r\"
    expect \"Organizational Unit Name (eg, section) \[MyDepartment\]:\"
    send \"$department\r\"
    expect \"Common Name (eg: your user, host, or server name) \[$mail\]:\"
    send \"$firstname $lastname\r\"
    expect \"Email Address \[[email protected]\]:\"
    send \"$mail\r\"
    expect eof
"

# do somethin else
[...]

exit 0

该脚本有效,请求将正确生成,但是期望非常慢。使用-d可以在第二次密码查询后为我显示每个预期的模式:

expect: does "test\r\n\r\n-----\r\nYou are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\n" (spawn_id exp3) match glob pattern "Country Name (2 letter code) [DE]:"? no
Country Name (2 letter code) [DE]:
expect: does "test\r\n\r\n-----\r\nYou are about to be asked to enter information that will be incorporated\r\ninto your certificate request.\r\nWhat you are about to enter is what is called a Distinguished Name or a DN.\r\nThere are quite a few fields but you can leave some blank\r\nFor some fields there will be a default value,\r\nIf you enter '.', the field will be left blank.\r\n-----\r\nCountry Name (2 letter code) [DE]:" (spawn_id exp3) match glob pattern "Country Name (2 letter code) [DE]:"? no
expect: timed out
send: sending "\r" to { exp3 }

我不明白为什么模式不匹配。我的意思是尽管在超时后仍然发送答复,但它的速度实在太慢了……(而且很糟糕)

有人对此问题有解释或解决方案吗?

bash pattern-matching expect
1个回答
0
投票

只是为了进一步进行故障排除,您可以只检查系统运行缓慢还是仅在运行Expect命令时运行?

有时由于DNS名称解析的延迟,系统响应也很慢。检查并删除/etc/resolve.conf中所有不必要的条目,然后尝试。

© www.soinside.com 2019 - 2024. All rights reserved.