Quero usar " expect
" para digitar automaticamente a <Enter>
tecla " " quando o script bash solicitar " Country Name (2 letter code) [US]:
".
Aqui está o esperado:
/usr/bin/expect << EOF
set timeout -1
spawn /bin/bash /path/to/generate_openssl_certificate.sh
expect {
"Country Name (2 letter code) [US]:" {send "\r" ; exp_continue}
}
EOF
Aqui está o erro:
spawn /bin/bash /path/to/generate_openssl_certificate.sh
invalid command name "US"
while executing
"US"
invoked from within
"expect {
"Country Name (2 letter code) [US]:" {send "\r" ; exp_continue}
}"
Quando tento usar " -re
" para corresponder à string, ele não corresponde à string " Country Name (2 letter code) [US]:
":
expect {
-re "Country Name \(2 letter code\) \[US\]:" {send "\r" ; exp_continue}
}
Aqui está a saída, a tela está aguardando a <Enter>
tecla " " para prosseguir:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
Como combinar o " Country Name (2 letter code) [US]:
" sem usar " -re
"? Como combinar o " Country Name (2 letter code) [US]:
" com " -re
"?
Expect é uma extensão da linguagem Tcl. Tcl usa chaves quadradas para substituição de comando (da mesma forma que shells do tipo POSIX usam
$(...)
). A substituição de comando se expandirá dentro de strings entre aspas duplas.Há duas coisas que você pode fazer:
escapar do colchete aberto
use o mecanismo de citação não interpolável do Tcl, chaves
Note que estou usando correspondência exata -- por padrão, expect usa correspondência glob, onde colchetes representam um conjunto de caracteres. Neste caso, você quer corresponder a colchetes literais.