2016-12-29 8 views
0

ログファイルをチェックするためにターミナルで実行するスクリプトがありますが、 ">"を使ってファイルにリダイレクトします。これは、このカラーコードなしで端末出力をファイルにリダイレクトする方法

<script> > ~/log.txt 

のように動作します。しかし、私のスクリプトは

print ("\033[0;34m$temp \e[0;30m"); 

使用時のようないくつかの色のマークが付いている「>」、テキストファイルは次のようになります。

^[[0;34m./a/a.log 
^[[0;30m^[[0;32mPASS^[[0m 
^[[0;34m./b/b.log 
^[[0;30m^[[0;32mPASS^[[0m 

私はしたくありませんカラースキームを削除します。なぜなら私は端末で(ファイルに出力せずに)実行すると結果を見るのが簡単だからです。 私を助けることができますか?

+0

スクリプトは、その標準出力が端末であることを認識し、それに応じてカラー出力をオンまたはオフに切り替える必要があります。シェルスクリプトの場合は 'test -t 1'を使います。 –

+0

詳細を教えてください。私は、標準出力がいつ端末であるかを認識する方法を知らない。どの変数や関数を使用できますか?私は通常、cshでスクリプトを書いています(perlは大丈夫です) – Thepro

+0

cshはスクリプトの作成にはあまり適していませんが、bashやそれに類するシェルに切り替えることをお勧めします。 –

答えて

0

ここでは、cshスクリプトのフルカラー設定を示します。出力は、標準出力が端末である場合にのみ色付けされます。

#!/bin/csh -f 

set colornames = (black red green yellow blue magenta cyan white) 

# set up standard colour indices 
@ i = 0 
while ($i < 8) 
    @ cc = ($i + 1) 
    set $colornames[$cc] = $i 
    @ i++ 
end 

# test if the standard output is a terminal  
test -t 1 
if ($status) then 
    # it is not a terminal; colour aliases do nothing 
    alias FG 'echo >/dev/null' 
    alias BG 'echo >/dev/null' 
    alias BO 'echo >/dev/null' 
    alias NC 'echo >/dev/null' 
else 
    # it is a terminal; colour aliases output escape sequences, portably 
    alias FG 'tput setaf $\!:1' 
    alias BG 'tput setab $\!:1' 
    alias BO 'tput bold' 
    alias NC 'tput sgr0' 
endif 

# example usage 

set silly = `FG red ; BG green; BO` 
set normal = `NC` 

echo "${silly}hello${normal}, world" 

私は素晴らしいcshのエキスパートではないので、これはおそらくよりエレガントにすることができます。

関連する問題