0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

標準出力の文字に色をつける方法

Posted at

端末のフォント・背景の色変更について

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
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?