Como criar uma instrução else com o comando expect?

5

Eu tenho o seguinte script de espera que adiciona um host conhecido se um host conhecido não existir.

#!/usr/bin/expect
spawn ssh user@domain "cd /home/user"
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
interact

O script funciona bem na primeira vez que eu ssh em um dispositivo, no entanto, se eu ssh em um dispositivo por um enésimo + 1 vez, ele gera um erro

send: spawn id exp6 not open
    while executing
"send "yes\r""
    (file "./testing_spawn.sh" line 4)

presumivelmente porque continua a esperar que a string Are you sure you want to continue connecting (yes/no)?

Como posso dizer ao script para apenas interact se essa mensagem não aparecer?

    
por user784637 21.03.2013 / 03:14

2 respostas

2

Use expect_before para corresponder à pergunta "host desconhecido" apenas se vier antes do prompt de comando:

#!/usr/bin/expect
spawn ssh user@domain
expect_before "*(yes/no)?" {
    send "yes\r"
}
expect "*# "
interact
    
por 20.03.2015 / 16:22
0

tente isto:

#./test.exp 1.1.1.1

test.exp

#!/usr/bin/expect -f
set ip [lindex $argv 0]

spawn ssh -q $ip
expect {
  timeout { send_user "\nFailed\n"; exit 1 }
  eof { send_user "\nSSH failure for $ip\n"; exit 1 }
  "Password:" {
    send "password\n"
  }
  "*(yes/no)?*" {
    send "yes\n"
    interact
  }
  "*#" {
    interact
  }
}
    
por 21.03.2013 / 03:47

Tags