2009-06-03 3 views
0

Ich führe eine Anwendung aus, die ungefähr ein Dutzend Mal nach einem Passwort des Benutzers fragt :-( Ich habe versucht, dieses Problem zu umgehen und es im automatischen Modus laufen zu lassen, aber ich kann es nicht über das Problem des mehrfachen Passwortes, das nicht gerade statisch ist, manchmal 4-5 Mal und irgendwann 9-10 mal fragtGeben Sie das Passwort mehrmals ein

Gibt es eine bessere Lösung für das Problem als das, was ich unten gegeben habe:

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

Mit der obigen Lösung, ich habe nur in der Lage gewesen, das Passwort zweimal zu fangen und dann manuell starten Enteri Ist für den Rest der Zeit eine Schleife mit dem Passwort möglich?

Antwort

2

den exp_continue Befehl nachschlagen - es verhindert, dass der Strom [expect] Befehl zurückkehrt, so kann es alle nachfolgenden Kennwortabfragen finden.

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

Wenn Sie der Benutzer das Passwort eingeben, anstatt sie im Klartext im Skript speichern, siehe How can I make an expect script prompt for a password?

0

Expect kann Schleifen verwenden - es ist nur TCL mit einigen hinzugefügten Befehlen, glaube ich. So tun nur

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

Sie benötigen {Klammern} um Ihre Aktionen: {set gefunden 1}, {senden "$ Passwort \ r"} –