2009-06-03 14 views
0

Je cours une application, qui demande un mot de passe de l'utilisateur sur une douzaine de fois :-( J'ai essayé d'utiliser pour contourner ce problème, et le faire fonctionner en mode automatique, mais je suis incapable de surmonter le problème du mot de passe à plusieurs reprises, qui n'est pas exactement statique Parfois, il demande 4-5 fois et parfois 9-10 foisEntrez le mot de passe plusieurs fois

Y at-il une meilleure solution au problème que ce que j'ai donné ci-dessous:

spawn myApp [lindex $argv 0] 
expect " password: $" 
send "$password\r" 
expect { 
    " password: $" send "$password\r" 
    "^Rollout Done " 
    "^Rollout Updated " 
} 

Avec la solution ci-dessus, j'ai seulement pu attraper le mot de passe deux fois, puis démarrer manuellement enteri ng pour le reste du temps, y a-t-il une boucle possible avec le mot de passe?

Répondre

2

Consulter la commande exp_continue - il empêche la commande [expect] courant de retour, il peut trouver les invites de mot de passe suivants.

spawn myApp [lindex $argv 0] 
expect { 
    -re { password: $} { 
     send "$password\r" 
     exp_continue 
    } 
    -re {^Rollout (?:Done|Updated) } 
} 

Si vous voulez que l'utilisateur d'entrer le mot de passe, plutôt que de le stocker dans le texte brut dans le script, voir How can I make an expect script prompt for a password?

0

Expect peut utiliser des boucles - c'est juste TCL avec quelques commandes ajoutées je crois. Bougez donc

set found 0 
while {$found < 1} 
{ 
expect { 
" password: $" send "$password\r" 
"^Rollout Done " set found 1 
"^Rollout Updated " set found 1 
} 
} 
+0

vous avez besoin {accolades} autour de vos actions: {Obtenue 1}, {envoyer "$ mot de passe \ r"} –

Questions connexes