スクリプト出力をファイルにリダイレクトするときのtputエスケープシーケンスの防止

スクリプト出力をファイルにリダイレクトするときのtputエスケープシーケンスの防止

使用できるシェル機能がありますtput

color=$( tput setaf 1 )
normal=$( tput sgr0 )
colorize() {
    echo "${color}$1$(normal)"
}

関数を呼び出すと、端末に期待どおりにファイル名が色で表示されます。

$ myScript.sh .
/path/to/dir # (in color red)

次に、出力をファイルにリダイレクトすると、次のようになります。

$ myScript.sh > /tmp/file.log

file.logそれでもエスケープシーケンスが含まれています。例:

^[[36m~/path/to/my/file/^[(B^[[[m

これは以下に関連する可能性があります。学期そして情報コンピューティング、端末はエスケープシーケンスをどのように解釈しますか?

アイデアは、「非表示」端末をエミュレートすることです。そうではありませんか?

私の用語は(Ubuntu 16.04)です。

$ echo $TERM
xterm

tputスクリプトがファイルにリダイレクトされたときにこれらのエスケープシーケンスを防ぐにはどうすればよいですか?

回避策:スクリプトにオプションを追加して、次lsgrep色を手動で無効にします--color=none

答え1

簡単に言えば、tputはこれを行いません。

より長い:スクリプトはこれを行うことができます。

たとえば、標準出力が端末であることを確認します。

if [ -t 1 ]
then
    color=$( tput setaf 1 )
    normal=$( tput sgr0 )
else
    color=""
    normal=""
fi

関連情報