2012-03-29 11 views
0

Ich schreibe mein erstes expect-Skript, um einen gvfs-mount auszuführen. Ich möchte, dass das Expect-Skript die Eingabeaufforderungen bis "Passwort:" beantwortet, erlaube mir, das Passwort einzugeben, und gehe dann zurück zum nicht-interaktiven Modus, um zu beenden.Wie kann ich "erwarten", den interaktiven Modus ein- und auszuschalten?

Ich möchte dieses Skript von autoexpect erzeugt ändern und etwas von mir entpersönlichte:

#!/usr/bin/expect -f 
set timeout -1 
spawn gvfs-mount {smb://[email protected]/my-userid$} 
match_max 100000 
expect -exact "Password required for share my-userid\$ on 10.253.x.y\r\nDomain \[WORKGROUP\]: " 
send -- "my-domain\r" 
expect -exact "my-domain\r\nPassword: " 
send -- "my-password\r" 
expect eof 

Gerade -exact Wechsel in der zweiten Sende auf -i legt das gesamte Skript in einem Zustand, wo es für mich wartet, Geben Sie die Domäne ein, lesen Sie jedoch nicht die Tastatur oder "Senden". Ich spekuliere, dass gvfs-mount in einem Hintergrundprozess erzeugt wurde, der nicht an die Vordergrund-stdin gebunden ist.

Wie kann ich die Interaktivität einiger "erwartet" umschalten?

Danke.

Antwort

1

So mache ich es. Ich bleibe aus der Interaktion heraus und täusche den Benutzer damit, dass er denkt, dass er sein Passwort eingibt, damit ich es in einer Variablen speichern kann.

expect "*?assword:*" { 
    stty -echo 
    if {[string length $lpass] < 1} { 
    expect_user { 
     -re "(.*)\n" {set lpass "$expect_out(1,string)"} 
     timeout {exp_continue} 
    } 
    } 
    send -- "$lpass\r" 
} 
stty echo 

können Sie auch springen in die und aus der Wechselwirkung durch eine Rückkehr in den Block, wie diese setzen:

interact -nobuffer -re "goodbye\r" { 
    return 
} 
send_user -- "you're no longer interacting with the spawned process\n" 

Dies wird die interact Anweisung verlassen, wenn ein Benutzer in Goodbye und Hits ein.

+1

Sie möchten wahrscheinlich "stty -echo", bevor Sie den Benutzer das Passwort eingeben (und dann natürlich "stty echo" hinterher) –

+0

@glennjackman guten Fang. Vielen Dank – resmon6

Verwandte Themen