2013-07-12 11 views
8

Diciamo che sto provando a scrivere uno script previsto per un test.sh che ha tre prompt: prompt1, prompt2, prompt3.Come si prevede di aspettarsi con i prompt facoltativi?

Il mio codice è simile a questo:

spawn test.sh 
expect "prompt1" 
send "pass1" 
expect "prompt2" 
send "pass2" 
expect "prompt3" 
send "pass3" 

Tuttavia, prompt2 si verifica solo la metà del tempo. Se prompt2 non viene visualizzato, lo script expect si interrompe. Come dovrei scrivere codice aspettato che salta su prompt2 se non viene visualizzato?

EDIT:

Fisso il mio codice:

/usr/bin/expect -c ' 
spawn ./test.sh 
expect { 
     "prompt1" { 
      send "pass1\r" 
      exp_continue 
     } 
     "prompt2" { 
      send "pass2\r" 
      exp_continue 
     } 
     "prompt3" { 
      send "pass3\r" 
      exp_continue 
     } 
} 
interact return 

'

In questo modo, il resto dello script esegue e fornisce in uscita.

+1

Avrete bisogno di 'expect' un altro modello di essere in grado di uscire dal giro. Altrimenti non arriverete mai alla linea 'interact'. –

risposta

9

Ci si può aspettare di più le cose:

expect { 
    "prompt2" { 
     send "pass2" 
     expect "prompt3" 
     send "pass3" 
    } 
    "prompt3" { 
     send "pass3" 
    } 
} 
+0

Oh uomo, non ho visto questo, ma questo è quasi identico alla mia correzione. – joshualan

+2

Come evitare la duplicazione del codice 'prompt3' /' pass3'? – Abdull

Problemi correlati