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

ファイルと電子メールの形式を修正するにはどうすればいいか教えてください。

電子メール本文に送信されない 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 に送信しました。
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

関連情報