2010-07-21 14 views
22

Utilizo esperar para ejecutar scripts de prueba. Las pruebas devuelven éxito/falla a través del código de salida. Pero espere el código de salida equivalente de retorno. ¿Cómo hacer esperar esperar el estado de salida correcto?Cómo devolver el código de salida del proceso generado en la secuencia de comandos Esperar?

Mis pruebas son scripts sql que se ejecutan con psql (procesador de mandatos postgresql). Dado que psql no permite especificar la contraseña de la base de datos como un parámetro de línea de comando, espera que las secuencias de comandos lo hagan.

lo tanto, mi esperar que la escritura se parece a:

spawn $SPAWN_CMD 
expect { 
     -re "Enter password for new role:" { 
       send "$PWPROMPT\n" 
       exp_continue 
     } -re "Enter it again:" { 
       send "$PWPROMPT\n" 
       exp_continue 
     } -re "Password(.*)" { 
       send "$PASSWORD\n" 
       exp_continue 
     } -re "Password(.*):" { 
       send "$PASSWORD\n" 
       exp_continue 
     } eof 
} 

Respuesta

27

Ya estás esperando el eof al final de su bucle, sólo tiene que utilizar waitcatch y el resultado:

spawn true 
expect eof 
catch wait result 
exit [lindex $result 3] 

salidas con 0.

spawn false 
expect eof 
catch wait result 
exit [lindex $result 3] 

salidas con 1.

+0

Hmm .. '[21:43:30] ~> expect <<<" spawn true; espera eof; capturar el resultado de espera; exit [lindex $ result 3] "; echo $?' produce '3' para mí –

+2

@ sasha.sochka Si lo escribe así, $ el resultado es interpretado por el shell en lugar de esperar. Ponga la entrada entre comillas simples, o escape el $. –

+0

Oh, mi culpa, lo tengo, gracias –

Cuestiones relacionadas