2017-05-15 15 views
0

スクリプトを書きましたが、コンソール出力を.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を使用して検索したり置換したりするのは面倒です。

ありがとうございました。

+0

ようこそスタックオーバーフロー。まもなく、[About]と[Ask]ページをお読みください。あなたの質問は何ですか?ログファイルのメッセージからカラーエンコーディングを省略するにはどうすればいいですか?あなたのスクリプトには「サイレントロギング」メカニズムが表示されないので、修正する必要があるオプションを推測することはできません。標準出力が '対話型デバイス'(端末か擬似tty)かどうかをテストし、それがそうでないか、または色付けするオプションによって指示されない限り、色付けを含まないことを決定できます( '--color = always'オプション)。ログに書き込まれたストリームから色データを取り除くことができます。間違いなく他にも存在します。 –

+0

[色を出力から削除する](http://stackoverflow.com/questions/17998978/removing-colors-from-output) –

+0

色を追加したり削除したりしない場合は、スクリプトを書面あなたの入力を読み、二重出力を書く関数( 'colortee'のような)を使用してください。いくつかの予約語で、 'colortee'は色付きストリームのエスケープコードの予約語を置き換えることができます。 –

答えて

0

>文字を使用して出力を指示できます。 printf "mytext" > out.txtは、ファイル "out.txt"に "mytext"を出力します。

+0

これは質問のタイトルを扱いますが、質問の本文には実際には質問はありません。 OPはI/Oリダイレクトを行う方法を知っていると思います。 –

関連する問題