端末のフォント・背景の色変更について
CSI(制御コード)で端末などの標準出力に色をつけることができる。
シェルスクリプトの他、どのプログラミング言語でも標準出力に制御コードを出力すれば良い。
制御文字を標準出力に出力してしまうと、ファイルにリダイレクトしたときにファイルに制御文字が入り込んでテキストエディタで読めなくなる。
簡易的な解決策としては、制御文字を標準エラー出力に、表示したい文字を標準出力に出力しておけばよい。
これで標準出力をリダイレクトしない場合は画面に色付きで文字が表示され、標準出力をファイルにリダイレクトした場合は、通常の文字だけがファイルに出力されるようになる。(標準エラー出力に制御文字が出力されているが、文字自体を表示しないので、何も起きない)
ただし、標準エラー出力もファイルにリダイレクトするとそのファイルには制御文字が含まれてしまうのであくまでも簡易的な方法。
サンプル
# !/bin/bash
if [ $# -lt 4 ]; then
echo "Usage: $0 <text> <R> <G> <B>"
echo " color values: 0-255"
exit 1
fi
text=$1
R=$2
G=$3
B=$4
bR=$((255 - $R))
bG=$((255 - $G))
bB=$((255 - $B))
# フォントの色変更
echo -ne "\033[38;2;${R};${G};${B}m" >&2
# 背景色変更
echo -ne "\033[48;2;${bR};${bG};${bB}m" >&2
# 文字を標準出力に出力
echo $text
# CSIリセット
echo -ne "\033[0m" >&2