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

相關內容