SHELLSCRIPT: echo $() schluckt Zeilenumbrüche

silvio_l

Registered User
Hallo,

ich würde mir gern täglich alle greylisted Einträge meiner /var/log/exim4/mainlog.1 inklusive der Anzahl aller gefundenen Zeilen per mail schicken lassen.

Meine Idee war folgende:

Code:
echo $(cat /var/log/exim4/mainlog.1 | grep greylisted.)$(echo; echo "Gesamt: ")$(cat /var/log/exim4/mainlog.1 | grep greylisted. | wc -l) | mail -s"LOG: Greylisted" mail@abc.de

Die Daten sind zwar alle enthalten nur gehen bei der Ausgabe mit echo sämtliche Zeilenumbrüche verloren.

Da ich die ganze Sache gerne als "Einzeiler" direkt in die crontab einfügen möchte wollte ich nicht den Umweg über ein extra Script machen.

Hat jemand eine andere Idee das zu lösen?

Gruß
Silvio
 
Wenn man das ganze um die überflüssige und falsche Verwendung von cat und echo eindampft, dann klappts sicher auch mit den Umbrüchen:
Code:
( grep greylisted /var/log/exim4/mainlog.1; echo -n "\nGesamt: "; grep greylisted /var/log/exim4/mainlog.1 | wc -l ) | mail -s"LOG: Greylisted" mail@abc.de
(ungetestet)
echo -n funktioniert evtl. nicht mit allen Shells. (zsh tut es)

PS: Es gibt im Netz Texte über die unnötige Verwendung von cat und co. - Da wurden auch die Auswirkungen erklärt. Hat zufällig jemand einen URL?

Mit unnötig ist z.B. sowas gemeint:
Code:
cat /var/log/messages | grep xyz
statt
Code:
grep xyz /var/log/messages

Bei der unnötigen Verwendung von echo kommt es leicht zum Verlust von Umbrüchen. Mit den $() hat das nichts zu tun:
Code:
ls -1
Ergibt ein Listing mit einem Objekt je Zeile.
Code:
echo $(ls -1)
Ergibt auch ein Listing, aber ohne Umbrüche.
 
Last edited by a moderator:
Hey,

da habt Ihr beide wohl Recht ;-)

Ist irgendwie eine dumme Angewohnheit.

Ohne echo/cat klappt es auch mit dem Nachbarn, Danke!

Bei der echo-Ausgabe fehlt im übrigen der "e" Parameter damit "\n" auch greift (zumindest bei mir unter Debian)

Gruß
Silvio
 
Back
Top