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
_
これは[〜#〜] term [〜#〜]およびinfocompと、端末がエスケープシーケンスをどのように解釈するかに関連している可能性がありますか?
アイデアは「非表示」端末をシミュレートすることですよね?
私のTERMは(Ubuntu 16.04)です:
_$ echo $TERM
xterm
_
スクリプトがファイルにリダイレクトされるときに、このようなtput
エスケープシーケンスを防ぐにはどうすればよいですか?
回避策:ls
またはgrep
のように_--color=none
_のように、手動で色付けを無効にするオプションをスクリプトに追加します。
短い:tputはそれをしません。
より長い:あなたのスクリプトはそれを行うことができます
たとえば、標準出力が端末であるかどうかを確認します。
if [ -t 1 ]
then
color=$( tput setaf 1 )
normal=$( tput sgr0 )
else
color=""
normal=""
fi