2016-07-21 18 views
1

Ich habe eine Textdatei mit einer Reihe von Operationen, die ich mit meinem Expect-Skript senden möchte, die aussieht wie (ersetzt op1 & op2 mit den Befehlen in meinem Text-Datei, eins Befehl pro Zeile):Wie verwende ich erwarten zusammen mit einem Bash-Skript

#!/usr/bin/expect 
spawn ssh [email protected] telnet jpaxdp 
expect {\-> } 
send "op1(20)\r" 
expect {\-> } 
send "op2\r" 
expect {\-> } 
send "exit\r" 
expect eof 

Wie kann ich das tun?

Antwort

1

Ich glaube nicht, dass ich Ihre Frage verstehe. Es scheint mir die einfachste Sache zu tun ist, um die Datei zu lassen erwartet Griff zu lesen:

#!/usr/bin/expect 
set command_file [lindex $argv 0] 
spawn ssh [email protected] telnet jpaxdp 
expect {\-> } 

set fh [open $command_file r] 
while {[gets $fh line] != -1} { 
    send "$line\r" 
    expect {\-> } 
} 
close $fh 

send "exit\r" 
expect eof 

Dann

+0

Awesome, ich wusste nicht, 'expect' würde Skriptbefehle wie diese essen! Funktioniert super! Vielen Dank! – cerr

+1

Expect erweitert Tcl, das eine allgemeine Sprache ist. Es gibt nicht viel, was es nicht tun kann. –

0

Sie können bash script verwenden, um eine Sequenz von Befehlen für expect zu erstellen und sie an sie zu senden.

Zum Beispiel haben Sie cmds.txt:

echo hello 
echo goodbye 

und nach Bash-Skript ex.sh genannt:

#!/bin/bash 

echo 'spawn bash' 
while read line; do 
    echo 'expect {$ }' 
    echo send '"'"$line\r"'"' 
done 
echo 'expect {$ }' 
echo 'send "exit\r"' 
echo 'expect eof' 

So, jetzt alles, was Sie tun müssen, ist die Verwendung Pipelines wie folgt aus:

cat cmds.txt | bash ex.sh | expect 

Es gibt aus:

[email protected]:/tmp$ cat cmds.txt | bash ex.sh | expect 
spawn bash 
[email protected]:/tmp$ echo hello 
hello 
[email protected]:/tmp$ echo goodbuy 
goodbuy 
[email protected]:/tmp$ exit 
exit 
+0

frist, aber wie funktioniert das mit meiner Telnet-Verbindung auf dem Remote-SSH-Host finden Sie in den 'Laich 'Zeile in meinem Skript oben:' spawn ssh root @ ccTest Telnet jpaxdp' – cerr

+0

@cerr Dies sollte wegen Pseudo-Tty funktioniert, die außer emuliert. Ich hoffe, wenn Sie Schlüssel-basierte SSH-Authentifizierung haben, sollte dies funktionieren. Welche Art von Problemen hast du? Wenn es irgendein Problem mit ssh gibt, versuche, die Option -t zu ssh hinzuzufügen – frist