• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Autoexpect Script hängt

Servus,

ich will mir eine txt datei von einem ftp server hohlen und hab mir dafür ein autoexpect script generiert...

die datei wird geholt, aber dann bleibt er hängen... d.h. es steht dann in der console "ftp> " und es ist auch noch eine eingabe möglich, aber er reagiert nicht mehr auf befehle... ich komm nur noch mit Strg + C raus...

das script soll sich aber automatisch ausloggen mit "exit"... hoffentlich kann mir jemand helfen...

Gruß Stefan

Hier der Code:

Code:
#!/usr/bin/expect -f

set force_conservative 1  ;# set to 1 to force conservative mode even if
                          ;# script wasn't run conservatively originally
if {$force_conservative} {
        set send_slow {1 .1}
        proc send {ignore arg} {
                sleep .1
                exp_send -s -- $arg
        }
}

set timeout -1
spawn ftp 10.0.2.50
match_max 100000
expect -exact "Connected to 10.0.2.50.\r
220- This system is monitored and evidence of criminal activity may be \r
220- reported to law enforcement officials.\r
220-\r
220-\r
220 HiPath FTP server ready\r
Name (10.0.2.50:a258): "
send -- "stefan\r"
expect -exact "stefan\r
331 Password required for stefan.\r
Password:"
send -- "xxx\r"
expect -exact "\r
230 User stefan logged in.\r
Remote system type is UNIX.\r
Using binary mode to transfer files.\r
ftp> "
send -- "get ftp.txt\r"
expect -exact "get ftp.txt\r\r
local: ftp.txt remote: ftp.txt\r
500 'EPSV': command not understood.\r
227 Entering Passive Mode (10,0,2,50,7,52)\r
150 Opening BINARY mode data connection for ftp.txt (538 bytes).\r
\r  0% |                                     |     0       0.00 KB/s    --:-- ET
A\r100% |*************************************|   538       2.44 MB/s    00:00 E
TA\r
226 Transfer complete.\r
538 bytes received in 00:00 (13.46 KB/s)\r
ftp> "
send -- "exit\r"
expect eof
 
A

Anonymous

Gast
Ich hab schon lange nichts mehr mit expect gemacht, aberich glaube ich habe den Fehler gefunden. Sicherlich hast du das Script mit einer Aufzeichnung erstellt und nicht nachbearbeitet. Dein script wartet genau auf folgenden String:

"get ftp.txt\r\r
local: ftp.txt remote: ftp.txt\r
500 'EPSV': command not understood.\r
227 Entering Passive Mode (10,0,2,50,7,52)\r
150 Opening BINARY mode data connection for ftp.txt (538 bytes).\r
\r 0% | | 0 0.00 KB/s --:-- ET
A\r100% |*************************************| 538 2.44 MB/s 00:00 E
TA\r
226 Transfer complete.\r
538 bytes received in 00:00 (13.46 KB/s)\r
ftp> "
ist nur ein einziges Zeichen anders, dann wartet er weiter bis der ganze String irgendwann mal genau so kommt, also praktisch wartet er für immer.
Du musst die Antworten auf die expect warten soll soweit kürzen und ändern dass sie in der Praxis auch eintreffen können, hier würde es sich anbieten wenn du nur auf den Promt vom ftp wartest also
Code:
expect -exact "ftp> "
dann sollte das script alles ignorieren was der andere Server so ausgibt bis ein Promt kommt, dann macht er weiter, in diesem Fall mit send -- "exit \r"

robi
 
Oben