スクリプトを書きましたが、コンソール出力を.txtファイルに自動的に記録するスクリプトに関数を追加したいとします。私のシェルスクリプトで使われているprintfは特定の文字の色を持っています。シェルの出力をtxtファイルにリダイレクト
サンプル:このため
# Color block
G="\033[32m"
N="\033[0m"
R="\033[31m"
Y="\033[33m"
# MCS Check
mcs=$(cat /home/admin/service-health.txt | grep -i mcs | cut -d ' ' -f 5 | tr . " ")
if [ "$mcs" == "up " ]
then
printf "${Y}MCS${N} Service Status is\t\t |${G}UP${N}\n"
else
printf "${Y}MCS${N} Service Status is\t\t |${R}DOWN${N}\n"
fi
コンソール出力の色が表示されます。 .txtログには必須ではありません。
私はその後、用いたアドレスにこの.txtファイルを電子メールで送信されます。
sendmail $vdp $eaddr < /home/admin/health-check.txt
私はスクリプト自体の中に出力をリダイレクトしたいと、私はこのブロックを使用:
sudo touch /home/admin/health-check.txt
exec > >(tee -i /home/admin/health-check.txt)
exec 2>&1
しかし、このため、色付きの出力ですが、私は私の電子メールでこれを取得し続けています:
[33mGSAN[0m Service Status is |[32mUP[0m
[33mMCS[0m Service Status is |[32mUP[0m
[33mTomcat[0m Service Status is |[32mUP[0m
[33mScheduler[0m Service Status is |[32mUP[0m
[33mMaintenance[0m Service Status is |[32mUP[0m
VDP [33mAccess State[0m is |[32mFULL[0m
色の剥ぎ取りについての考えリダイレクト時に?私はsedを使用して検索したり置換したりするのは面倒です。
ありがとうございました。
ようこそスタックオーバーフロー。まもなく、[About]と[Ask]ページをお読みください。あなたの質問は何ですか?ログファイルのメッセージからカラーエンコーディングを省略するにはどうすればいいですか?あなたのスクリプトには「サイレントロギング」メカニズムが表示されないので、修正する必要があるオプションを推測することはできません。標準出力が '対話型デバイス'(端末か擬似tty)かどうかをテストし、それがそうでないか、または色付けするオプションによって指示されない限り、色付けを含まないことを決定できます( '--color = always'オプション)。ログに書き込まれたストリームから色データを取り除くことができます。間違いなく他にも存在します。 –
[色を出力から削除する](http://stackoverflow.com/questions/17998978/removing-colors-from-output) –
色を追加したり削除したりしない場合は、スクリプトを書面あなたの入力を読み、二重出力を書く関数( 'colortee'のような)を使用してください。いくつかの予約語で、 'colortee'は色付きストリームのエスケープコードの予約語を置き換えることができます。 –