Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Autoexpect Script hängt

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Stefan@Linux
Newbie
Newbie
Beiträge: 1
Registriert: 25. Nov 2004, 10:01

Autoexpect Script hängt

Beitrag von Stefan@Linux »

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: Alles auswählen

#!/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
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3175
Registriert: 25. Aug 2004, 02:13

Re: Autoexpect Script hängt

Beitrag von robi »

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: Alles auswählen

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
Antworten