- Registriert
- 20 Apr. 2007
- Beiträge
- 71.968
Eine Lösung habe ich dank oder trotz Gockel nicht gefunden. Entweder gingen die Antworten an der Fragestellung vorbei oder es gab unsaubere Workarounds, die nur in Spezialfällen (ohne Leerzeichen) funktionierten.
Beliebige variierende PDF-Dateien, die überwiegend Leerzeichen im Dateinamen enthalten, werden bei Rechnungserstellung in ein temporäres Verzeichnis geschrieben.
Ein bash-Skript soll diese Dateien im temp-Verzeichnis als Mailanhang an einen Empfänger verschicken, bevor diese wieder gelöscht werden.
Da einige unserer Kunden ZIP-Dateien als Anhang blockieren, müssen die PDF-Dateien einzeln an die Mail angehängt werden.
das Skript soll am Schluss via
die Rechnung versenden.
Der Anweisungsteil "-a blabla.pdf -a bla bla.pdf" ändert sich bei jeder Rechnung, muss also in einer Variablen übergeben werden.
Die Crux sind die Leerzeichen im Dateinamen und dass die Dateinamen dynamisch hinzugefügt werden müssen.
Mein Gedankenansatz war gewesen, die Anweisung zum Versand der Mail als starren Befehl zu "bauen"
echo $anhang
-a 9262_mueller.pdf
-a Produkt1.pdf
-a Produkt2.pdf
-a Produkt3.pdf
in o.a. Code eingefügt funktioniert
Sind aber Leerstellen in den Dateinamen enthalten, funktioniert es nicht, selbst wenn ich die Dateinamen in Anführungszeichen setze.
Mit Leerstellen im Dateinamen erhalte ich z.B.:
dass das 9262\ in Hochkommata steht, macht mich schon stutzig, aber ich bekomme es nicht weg.
Ändere ich das Skript, dass die Dateinamen in Anführungszeichen stehen, wird das Ergebnis auch nicht besser:
"No recipients specified.", obwohl dieser klar angegeben ist. Einzige Änderung gegenüber dem Beispiel oben ist ein etwas anderer Inhalt er Variablen $anhang.
Meine Fragen:
Habe ich einen Denkfehler gemacht?
Wer hat eine funktionierende Lösung parat oder kennt einen Link zu einer solchen?
Beliebige variierende PDF-Dateien, die überwiegend Leerzeichen im Dateinamen enthalten, werden bei Rechnungserstellung in ein temporäres Verzeichnis geschrieben.
Ein bash-Skript soll diese Dateien im temp-Verzeichnis als Mailanhang an einen Empfänger verschicken, bevor diese wieder gelöscht werden.
Da einige unserer Kunden ZIP-Dateien als Anhang blockieren, müssen die PDF-Dateien einzeln an die Mail angehängt werden.
das Skript soll am Schluss via
Code:
...
echo kurzer Text|mutt -s "Rechnung xyz" user@domain.com -a blabla.pdf -a bla bla.pdf...
Der Anweisungsteil "-a blabla.pdf -a bla bla.pdf" ändert sich bei jeder Rechnung, muss also in einer Variablen übergeben werden.
Die Crux sind die Leerzeichen im Dateinamen und dass die Dateinamen dynamisch hinzugefügt werden müssen.
Mein Gedankenansatz war gewesen, die Anweisung zum Versand der Mail als starren Befehl zu "bauen"
Code:
echo Anbei die Rechnung Ihrer letzten Bestellung |mutt -s "Rechnung 4711" user@domain.tld $anhang
echo $anhang
-a 9262_mueller.pdf
-a Produkt1.pdf
-a Produkt2.pdf
-a Produkt3.pdf
in o.a. Code eingefügt funktioniert
Sind aber Leerstellen in den Dateinamen enthalten, funktioniert es nicht, selbst wenn ich die Dateinamen in Anführungszeichen setze.
Code:
#!/bin/sh
ls *pdf >erg
while read "FILE";do
f=`echo $FILE| sed -e s/" "/"\\\\\ "/g`
anhang=$anhang" "-a" "$f
done < erg
echo test| mutt -s "Rechnung xyz" user@domain.tld $anhang
Meesage sent
Mit Leerstellen im Dateinamen erhalte ich z.B.:
Code:
mutt -s 'Rechnung xyz' user@domain.tld -a '9262\' mueller.pdf -a Produkt1.pdf -a Produkt2.pdf -a Produkt3.pdf
Can't stat 9262\: No such file or directory
9262\: unable to attach file.
Ändere ich das Skript, dass die Dateinamen in Anführungszeichen stehen, wird das Ergebnis auch nicht besser:
Code:
#!/bin/sh
ls *pdf >erg
while read "FILE";do
anhang=$anhang" "-a" " \"$FILE\"
done < erg
echo test| mutt -s "Rechnung xyz" user@domain.tld $anhang
mutt -s 'Rechnung xyz' user@domain.tld -a '"9262' 'mueller.pdf"' -a '"Produkt1.pdf"' -a '"Produkt2.pdf"' -a '"Produkt3.pdf"'
+ echo test
No recipients specified.
Meine Fragen:
Habe ich einen Denkfehler gemacht?
Wer hat eine funktionierende Lösung parat oder kennt einen Link zu einer solchen?
Zuletzt bearbeitet: