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.
Wichtiges Problem mit Expect Script. ( Ausgabe in Datei )
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ß
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ß
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:
Janka
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
%
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.
Ich mag die Schreie.