2016-05-02 12 views
1

Ich versuche, ein Bash/Expect-Skript zu SSH in eine APC-PDU (ein PowerStrip) zu machen und remote eine Steckdose basierend auf einem Befehlszeilenargument neu zu starten. Bisher habe ich dieses:Erwarte neue Zeile

#!/usr/bin/expect 

#usage: pdu.sh user pass ipaddr outletNum 

set user [lrange $argv 0 0] 
set pass [lrange $argv 1 1] 
set ipaddr [lrange $argv 2 2] 
set outlet [lrange $argv 3 3] 

spawn ssh [email protected]$ipaddr 

sleep 60 

expect "*?assword*" 
send "$pass\n" 
expect ">" 

sleep 5 

send "1\n" 
expect ">" 
send "2\n" 
expect ">" 
send "1\n" 
expect ">" 

send "$outlet\n" 
expect ">" 
send "1\n" 
expect ">" 
send "2\n" 
send "yes\n" 
expect ">" 
send "1\n" 
send "yes\n" 

send "exit\n" 

So ist die Laich der SSH funktioniert, und es gibt das Passwort korrekt, aber dann, nachdem ich an die PDU angeschlossen bin, und es zeigt die Optionen Schnittstelle, mein Skript sendet ein 12 statt 1 (eingeben) 2. Entschuldigung, wenn das verwirrend ist. Hier ist, was es tut:

Es zeigt eine 12 anstelle eines 1 und dann eine neue Zeile und dann ein 2. Ich kann es speziell eine neue Zeile nach der 1 in dieser Zeile senden haben send "1\n"

Warum funktioniert das \ n in diesem Beispiel nicht? Vielen Dank!

+1

Normalerweise '\ r' steht für„Enter zu drücken“, nicht' \ n ' –

+0

Dank Mann. Wissen Sie auch, warum es nach dem Senden der Ausgangsnummer abstürzen könnte? So sieht es nach dem Senden des Arguments "outlet" aus http://i.imgur.com/SlIOZdu.png – ToxicProxy

Antwort

2

Erwarten Sie Verwendung \ r (Wagenrücklauf) anstelle von \ n (UNIX neue Zeile). Auch können Sie Ihre erwarten Skript ein wenig durch Vereinfachung:

expect { 
">" {send "1\r"; exp_continue} 
# Next expect token and response and so on 
} 
+0

Perfect. Vielen Dank! – ToxicProxy