bash 脚本 blcheck 输出的电子邮件问题

bash 脚本 blcheck 输出的电子邮件问题

来自 github 的 Bash 脚本 blcheck 格式存在电子邮件输出问题

控制台输出显示正确,但当通过 mailx 发送到电子邮件时,将作为附件而不是正文。
33%% dnsbl.inps.de ✓
50%% xbl.spamhaus.org ✓

输出到文件或电子邮件示例:
16%% dnsbl-3.uceprotect.net ^MESC(BESC[m 16%% dnsbl-.uceprotect.net ✓ESC(BESC[m

请告知如何更正文件和电子邮件中的格式?

未发送到 eamil 正文的 CMD:

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 上提交了一个 Pull 请求,其中包含一个新选项,可以使输出友好地用于非交互式使用。
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

相关内容