Bash-скрипт blcheck из github проблемы с форматом при отправке по электронной почте
Вывод консоли отображается правильно, но при отправке на электронную почту через mailx он будет отправлен как вложение, а не как тело письма.
33%% dnsbl.inps.de ✓
50%% xbl.spamhaus.org ✓
Пример вывода в файл или по электронной почте:
16%% dnsbl-3.uceprotect.net ^MESC(BESC[m 16%% dnsbl-.uceprotect.net ✓ESC(BESC[m
Посоветуйте, пожалуйста, как мне исправить формат в файле и электронном письме?
CMD, который не отправляется в тело eamil:
sh blcheck -v xx.xx.xx.xx | mail -s "server-blcheck
дата" [email protected]
сценарий:https://github.com/IntellexApps/blcheck
После помощи @john1024 и @cas и предыдущего постаУдаление управляющих символовниже cmd решена проблема.
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 отправил запрос на включение изменений на github с новой опцией, позволяющей сделать вывод удобным для неинтерактивного использования.
https://github.com/IntellexApps/blcheck/pull/2
решение1
То, что вы видите, это управляющие последовательности ANSI. В blcheck
, они используются для изменения цвета отображаемого текстана терминале. Как вы уже обнаружили, они не работают в сообщениях электронной почты.
Чтобы удалить их навсегда, отредактируйте blcheck
скрипт в вашем любимом редакторе. Найдите строки:
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
CLEAR=$(tput sgr0)
И замените эти строки на:
RED=
GREEN=
YELLOW=
CLEAR=
blcheck
Это изначально предотвратит добавление последовательностей ANSI.
Более гибкий подход
Можно заставить код работать как для терминала (ANSI), так и для конвейера (не ANSI). Следующий код проверяет, является ли stdout терминалом. Если это так, он устанавливает переменные цвета в требуемые последовательности ANSI. Если это не терминал, последовательности ANSI не генерируются.
RED=
GREEN=
YELLOW=
CLEAR=
if [ -t 1 ]
then
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
CLEAR=$(tput sgr0)
fi