Algumas coisas estão erradas:
- em uma string de aspas duplas
[confirm]
tentará chamar o comando expect "confirm" - colchetes em espera são como backticks no shell - espera precisa ter argumentos separados por espaço em branco. Portanto, é essencial colocar um espaço antes da chave de abertura
- seu script não espera o prompt de substituição condicionalmente . Você precisa usar o formulário de vários padrões do comando
expect
, onde o primeiro correspondido ganha.
Tente isto:
expect {
-exact {Do you want to over write? [confirm]} {
send "\r"
exp_continue
}
"*#"
}
send "exit\r"
expect eof
Notas
- Estou usando a correspondência "exata", pois você tem os caracteres curinga da glob
?
e[...]
que interfeririam. - Estou usando as cotações de sem interpolação da expectativa (chaves) para impedir que
[confirm]
tente substituir o comando - Espero que o prompt de substituição ou o prompt de comando
- Eu uso
exp_continue
para permanecer dentro desse comando expect se o prompt de substituição aparecer. Isso significa que ainda posso procurar o prompt de comando. - os dois marcadores acima explicam como implementar a correspondência condicional.
- Eu suponho que você só quer apertar enter no prompt de substituição.
- depois de você
exit
, aguarde queeof
permita que a sessão ssh termine normalmente