Você pode corresponder a um "padrão" de tempo limite nas linhas expect
. Por exemplo,
#!/usr/bin/expect -f
proc abort { } { send_user "Timeout!" ; exit 2 }
set timeout 1
set host_name [lindex $argv 0]
spawn ssh -q -o StrictHostKeyChecking=no "user1\@$host_name"
expect timeout abort "assword:"
send "abcd@123\r"
expect timeout abort "assword: " { send_user "bad password\n"; exit 3 } "$\r"
puts "user1 loggedin successfully"
Isso adiciona um procedimento de uma linha abort
ao início e o padrão + sequência de ações timeout abort
a cada expect
. Isso chamará o procedimento se a expectativa expirar. O procedimento grava uma string para stdout e sai com o código de retorno 2 em vez do padrão 0. Você pode testar esse código de saída no seu script ksh se quiser.
Para detectar uma senha de login incorreta, você pode procurar um segundo prompt para a senha ao mesmo tempo em que procura o prompt "$"
mostrando que você efetuou login ok.