2017-11-03 6 views
0

Ich benutze erwarten, um ein Bash-Skript, das ssh zu 5 Boxen läuft, führt eine aptitude dist-upgrade-d, zip-up die Pakete, dann scps sie zurück in die Originalverpackung.Wie verwende ich erwarten für Wiederholungsfälle, ohne ein langes Skript?

Alle Felder haben das gleiche Passwort und alle Felder erfordern eine Eingabe von "y", um ja zum dist-upgrade zu sagen.

Mein aktueller erwarten Skript mit vielen Wiederholungen der folgenden

lang und chaotisch ist
## Original box 
expect "password" 
send "Password\n" 
## Box sshing to 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 

Meine Frage ist, wie kann ich „dedupe“ dies so, dass, wenn ein Passwort gefragt wird es das Passwort sendet, und wo eine Fortsetzung gefragt wird, sendet es y. Damit ich muss kommen nicht perfekt, um von dem, was als

Voll Skript unten (manchmal eine Schlüsselprüfung in den Mix geworfen wird, wo ich „ja“ senden):

#!/usr/bin/expect -f 
set timeout -1 
## This uses manualpatching.sh, used to zip up a list of the latest Debian packages 
spawn ./manualpatching.sh 
## BOX1 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
## BOX2 
expect "password" 
send "Password\n" 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
expect "password" 
send "Password\n" 
expect "connecting" 
send "yes\n" 
## BOX3 
expect "password" 
send "Password\n" 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
expect "password" 
send "Password\n" 
## BOX4 
expect "password" 
send "Password\n" 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
expect "password" 
send "Password\n" 
## BOX5 
expect "password" 
send "Password\n" 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
expect "password" 
send "Password\n" 
## BOX6 
expect "password" 
send "Password\n" 
expect "password" 
send "Password\n" 
expect "want to continue?" 
send "y\n" 
expect "password" 
send "Password\n" 
## END 
expect eof 
+0

Bitte zeigen Sie Ihre Skript! – Gaurav

+0

Ok, ich werde den Beitrag jetzt bearbeiten –

+0

Es ist da, lassen Sie mich wissen, was Sie denken, danke –

Antwort

3

Danke an Gaurav, dass er mich in die richtige Richtung weist.

Ich mit exp_continue mein Skript richtig abgespeckt, ist es jetzt viel mehr sauber und vielseitig:

#!/usr/bin/expect -f 
set timeout -1 
spawn ./manualpatching.sh 
expect { 
     "Are you sure you want to continue connecting (yes/no)" { 
      send "yes\r" 
      exp_continue 
     } 
     "password" { 
      send "Password\r" 
      exp_continue 
     } 
     "want to continue?" { 
      send "y\r" 
      exp_continue 
     } 
} 
+0

Ich würde einfach 'eof' nach dem" will fortfahren "Aktionsblock hinzufügen. –

+0

Sorry für meine Ignoranz, was wird das tun? –

+1

Momentan gibt es keine Muster, die aus dieser Erwartungsschleife ausbrechen werden: Alle Zweige verwenden 'exp_continue'. "eof" zu erwarten ist nur eine ausdrückliche Erinnerung für Sie (und alle anderen, die dieses Skript beibehalten), dass Sie erwarten, dass das erzeugte Programm endet, und das Skript kann dann weitermachen. –

Verwandte Themen