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