來自 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