使用できるシェル機能があります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
スクリプトがファイルにリダイレクトされたときにこれらのエスケープシーケンスを防ぐにはどうすればよいですか?
回避策:スクリプトにオプションを追加して、次ls
のgrep
色を手動で無効にします--color=none
。
答え1
簡単に言えば、tputはこれを行いません。
より長い:スクリプトはこれを行うことができます。
たとえば、標準出力が端末であることを確認します。
if [ -t 1 ]
then
color=$( tput setaf 1 )
normal=$( tput sgr0 )
else
color=""
normal=""
fi