Ich habe ein seltsames Problem, wenn ich eine Katze per Pipe an die E-Mail weiterleite.
Ich habe eine einfache Textdatei, die aus einem Skript kompiliert wurde und einen Bericht darüber enthält, welche Ordner im Skript kopiert wurden. Diesen Bericht möchte ich dann per E-Mail an die Systemadministratoren senden.
Das Skript generiert den Bericht einwandfrei. Wenn ich es ausführe
cat /tmp/report.txt
Ich erhalte eine schön formatierte Ausgabe mit allen Zeilenumbrüchen, die ich erwarte.
Copy report. Started on Mon Sep 28 13:37:57 BST 2015
Run in progress?: Yes
3 directories were copied.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)
Copy completed on 2015.09.28 at 13:37:59
Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)
Copy completed on 2015.09.28 at 13:38:01
Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps
Aus irgendeinem Grund, wenn ich dies jetzt an Mail weiterleite
cat /tmp/report.txt | mail -s "Copy Report" [email protected]
oder
mail -s "Copy Report" [email protected] < /tmp/report.txt
Dies ist die E-Mail, die ich bekomme.
Copy report. Started on Mon Sep 28 13:37:57 BST 2015
Run in progress?: Yes
3 directories were copied.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:37:59
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14) Copy completed on 2015.09.28 at 13:37:59 Copy info:
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k
0inputs+355896outputs (0major+152minor)pagefaults 0swaps
Copy started on 2015.09.28 at 13:38:01
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18) Copy completed on 2015.09.28 at 13:38:01 Copy info:
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k
0inputs+355896outputs (0major+151minor)pagefaults 0swaps
Was ist los? Manche Zeilenumbrüche sind da, manche nicht! Ich habe versucht, die Datei sowohl in vi als auch in nano zu bearbeiten und sicherzustellen, dass die Zeilenumbrüche tatsächlich da waren. Ich habe sie auch gelöscht und neu erstellt und die E-Mail-Ausgabe bleibt dieselbe.
Verwenden von /usr/bin/mail
Weitere Informationen:
Ich habe das Folgende von Hand in eine Textdatei eingegeben und dieselbe Weiterleitung an die E-Mail durchgeführt. Am Anfang jeder Zeile habe ich das Wort „Kopieren“ eingefügt.
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)
Copy completed on 2015.09.28 at 13:37:57
Copy info:
Copy 0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
Copy 0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Das habe ich in der E-Mail erhalten:
Copy started on 2015.09.28 at 13:37:57
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Copy completed on 2015.09.28 at 13:37:57 Copy info:
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k
0inputs+355896outputs (0major+150minor)pagefaults 0swaps
Ich habe dann alle Wörter mit dem Zusatz „Kopieren“ entfernt. Das hier ist, was ich in der E-Mail erhalten habe.
Started on 2015.09.29 at 09:46:49
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10) Completed on 2015.09.29 at 09:46:49
Info:
0.00user 0.46system 0:01.98elapsed 23%CPU (0avgtext+0avgdata 2552maxresident)k
0inputs+355896outputs (0major+149minor)pagefaults 0swaps
Dachte, es könnte etwas mit dem Wort „Kopie“ zu tun haben, aber ich habe immer noch eine Zeile ohne Zeilenumbruch!
Dies ist die Ausgabe voncat -vet /tmp/report.txt
Copy report. Started on Mon Sep 28 13:37:57 BST 2015$
$
Run in progress?: Yes$
$
$
$
3 directories were copied.$
$
$
Copy started on 2015.09.28 at 13:37:57$
Copying /mnt/smb/New folder (10) to /mnt/backup/New folder (10)$
Copy completed on 2015.09.28 at 13:37:57$
Copy info:$
0.01user 0.47system 0:01.83elapsed 26%CPU (0avgtext+0avgdata 2668maxresident)k$
0inputs+355896outputs (0major+150minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:37:59$
Copying /mnt/smb/New folder (14) to /mnt/backup/New folder (14)$
Copy completed on 2015.09.28 at 13:37:59$
Copy info:$
0.00user 0.41system 0:01.78elapsed 23%CPU (0avgtext+0avgdata 2620maxresident)k$
0inputs+355896outputs (0major+152minor)pagefaults 0swaps$
$
$
Copy started on 2015.09.28 at 13:38:01$
Copying /mnt/smb/New folder (18) to /mnt/backup/New folder (18)$
Copy completed on 2015.09.28 at 13:38:01$
Copy info:$
0.00user 0.28system 0:01.71elapsed 16%CPU (0avgtext+0avgdata 2768maxresident)k$
0inputs+355896outputs (0major+151minor)pagefaults 0swaps$
Antwort1
Sie leiden wahrscheinlich unter dem "format=flowed"Besonderheitvor langer Zeit eingeführt, sieherfc2646.
Sie werden wahrscheinlich feststellen, dass einige Zeilen ein Leerzeichen am Ende haben. Einige E-Mail-Programme interpretieren dies als „Verbinde diese Zeile mit der nächsten und führe dann den Textumbruch für die Zeilen erneut durch, damit er auf die Bildschirmbreite passt“.
Normalerweise sollte dies nur durchgeführt werden, wenn Ihre E-Mail über die Content-Type
Header-Option verfügt format=flowed
, heutzutage ist dies jedoch aufgrund der Nicht-Unix-Benutzer zur Standardeinstellung geworden.
Verwenden Sie es cat -vet
für Ihre Daten, um zu prüfen, ob nachstehende Leerzeichen vorhanden sind. Verwenden Sie es, sed 's/ \+$//'
um sie zu entfernen.
Ich habe in Ihren Daten weder Leerzeichen am Ende noch Steuerzeichen (oder Wagenrückläufe) gesehen. Es gibt also keine wirkliche Entschuldigung dafür, dass Ihr Mailer diese manipuliert hat.
Ein letzter Versuch: Gehen Sie wie von Andrzej A. Filip vorgeschlagen mail
direkt zu sendmail
. Dadurch können Sie einen expliziten Content-Type-Header hinzufügen. Beispiel:
(echo 'Subject: Copy Report'
echo 'Content-Type: text/plain; charset=us-ascii; format=fixed'
echo
cat /tmp/report.txt
) | sendmail [email protected]
Das Letzte echo
ist, die Header vor den Daten zu beenden. Sendmail befindet sich möglicherweise nicht in Ihrem PATH. Suchen Sie in /sbin und /usr/sbin usw.