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

おすすめ記事