2013-07-12 32 views
8

Załóżmy, że próbuję napisać skrypt oczekiwany dla pliku test.sh, który ma trzy monity: prompt1, prompt2, prompt3.Jak korzystać z opcjonalnych podpowiedzi?

Mój kod to tak:

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

Jednak prompt2 występuje tylko połowę czasu. Jeśli prompt2 nie pojawi się, oczekiwany skrypt zostanie zerwany. W jaki sposób mogę napisać kod, który przeskakuje przez prompt2, jeśli się nie pojawi?

EDIT:

Naprawiono mój kod:

/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 

'

ten sposób reszta skryptu wykonuje i dostarcza dane wyjściowe.

+1

trzeba będzie 'expect' inny wzór, aby być w stanie wyrwać się z pętli. W przeciwnym razie nigdy nie dojdziesz do linii "interakcji". –

Odpowiedz

9

Można oczekiwać, że wiele rzeczy:

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

O rany, nie widziałem tego, ale jest to prawie identyczne z moją poprawką. – joshualan

+2

Jak można uniknąć duplikowania kodu "prompt3' /' pass3'? – Abdull