E-Mail-Problem mit der Ausgabe des Bash-Skripts Blcheck

E-Mail-Problem mit der Ausgabe des Bash-Skripts Blcheck

Bash-Skript blcheck von GitHub - Formatprobleme beim Versenden von E-Mail-Ausgaben

Die Konsolenausgabe wird korrekt angezeigt, aber beim Senden per E-Mail über Mailx wird sie als Anhang gesendet und nicht in den Textkörper.
33 %% dnsbl.inps.de ✓
50 %% xbl.spamhaus.org ✓

Beispiel für die Ausgabe in eine Datei oder per E-Mail:
16%% dnsbl-3.uceprotect.net ^MESC(BESC[m 16%% dnsbl-.uceprotect.net ✓ESC(BESC[m

Bitte geben Sie mir einen Rat, wie ich das Format in Datei und E-Mail korrigieren kann?

CMD, das nicht an den E-Mail-Text gesendet wird:

sh blcheck -v xx.xx.xx.xx | mail -s "server-blcheckDatum" [email protected]

Skript:https://github.com/IntellexApps/blcheck


Nach Unterstützung von @john1024 & @cas und vorherigem BeitragEntfernen von SteuerzeichenDas Problem wurde mit dem folgenden Befehl behoben.

CMD: ./blcheck-l -v xx.xx.xx.xx | perl -pe 's/\e([^[]]|[.*?[a-zA-Z]|].*?\a)//g' | col -b | mail -s "blcheck-l -v `date`" email@address

darko-poljak hat auf GitHub einen Pull Request mit einer neuen Option eingereicht, um die Ausgabe für die nicht interaktive Verwendung benutzerfreundlich zu gestalten.
https://github.com/IntellexApps/blcheck/pull/2

Antwort1

Was Sie sehen, sind ANSI-Escape-Sequenzen. In blcheckwerden sie verwendet, um die Farben des angezeigten Textes zu ändernam Terminal. Wie Sie festgestellt haben, funktionieren sie in E-Mail-Nachrichten nicht.

Um sie dauerhaft zu entfernen, bearbeiten Sie das blcheckSkript mit Ihrem bevorzugten Editor. Suchen Sie die Zeilen:

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
CLEAR=$(tput sgr0)

Und ersetzen Sie diese Zeilen durch:

RED=
GREEN=
YELLOW=
CLEAR=

Dadurch wird blcheckdas Hinzufügen der ANSI-Sequenzen von vornherein verhindert.

Flexiblerer Ansatz

Es ist möglich, den Code entweder für das Terminal (ANSI) oder eine Pipeline (kein ANSI) zum Laufen zu bringen. Der folgende Code prüft, ob stdout ein Terminal ist. Wenn dies der Fall ist, setzt er die Farbvariablen auf die erforderlichen ANSI-Sequenzen. Wenn es kein Terminal ist, werden keine ANSI-Sequenzen generiert.

RED=
GREEN=
YELLOW=
CLEAR=
if [ -t 1 ]
then
    RED=$(tput setaf 1)
    GREEN=$(tput setaf 2)
    YELLOW=$(tput setaf 3)
    CLEAR=$(tput sgr0)
fi

verwandte Informationen