Wichtiges Problem mit Expect Script. ( Ausgabe in Datei )

Message
Author
jochen123
Posts: 23
Joined: 21. Aug 2006 11:45

#16 Post by jochen123 »

Hm das mit dem ausfiltern von "." und ".." klappt irgendwie nicht.

Remote kann ich das ja mit "ls -1" lösen dann listet er "." und ".." nicht auf. Aber lokal listet er die halt trotzdem auf.

if { ($eingang_file eq ".") || ($eingang_file eq "..") } continue

Oder ist die if Abfrage nur dafür da damit er auch weiter macht wenn keine Dateien vorhanden sind? Ich muss die . under .. aber rausfiltern weil er sonst probiert diese zu kopieren.

jochen123
Posts: 23
Joined: 21. Aug 2006 11:45

#17 Post by jochen123 »

Problem gefunden.

set eingang_extern_files [ split $expect_out(1,string) \n ]

Bei deiner Sache mit "split" schreibt er bei allen Dateien die er in die Variable schreibt bis auf die letzte ein "^M" hinter die Dateien.
Deswegen konnte ich den "." nicht ausfilter da es ja ".^M" war.

Habs nun wieder so geändert wie ich es vorher gemacht habe. Die werden ja durch "ls" schon unternander gelistet.

set eingang_extern_files $expect_out(1,string)

Bei dem "glob" Befehl musste ich noch ein "-nocomplain" anhängen damit er auch weiter macht wenn keine Dateien in dem ordner vorhanden sind. Aber der Befehl ist klasse ;)


Nun läuft das Script perfekt und arbeitet fehlerfrei.

Vielen Dank für deine Hilfe. Hätte ich sonst nicht geschafft.

Gruß

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#18 Post by Janka »

Vielleicht ist es eine ganz gute Idee, das CR (^M) ganz auszufiltern.

regsub -all {\r} $VAR {} VAR

schmeißt alle ^M aus dem Inhalt einer Variable raus und speichert das Ergebnis wieder in der Variable.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

jochen123
Posts: 23
Joined: 21. Aug 2006 11:45

#19 Post by jochen123 »

Ja aber wo ist den der vorteil mit dem "split"???

Wenn ich es ohne das mache steht das "^M" ja gar nicht drin und alles ist schick

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#20 Post by Janka »

Das split trennt den von ls -a1 gelieferten String an den "\n" in einzelne Elemente auf. Diese werden dann von dem foreach verarbeitet.

Ohne split funktioniert es auch, weil Zeilensprünge in einem String von Tcl ebenfalls als Trennzeichen für foreach anerkannt werden. Das ist aber mehr ein "dreckiges" Feature von Tcl, da es Probleme macht, sobald ein Dateiname ein \n (ausgeschrieben!) \r oder einen \ am Zeilenende enthält. Auch \a \b etc. werden geschluckt. Probier mal:

Code: Select all

$ tclsh
% set VAR a\\n\r\nb
a\n
b
% foreach ELEMENT $VAR { puts $ELEMENT }
a

b
% foreach ELEMENT [ split $VAR \n ] { puts $ELEMENT }
a\n
b
%
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Post Reply