ターミナルで文字色や背景色を指定する方法
Linux等のコンソールで、文字色や背景色を指定するにはANSIエスケープシーケンスを使えばよい。
例えば、コマンドライン上から、次のようなechoコマンドで実行すると……
echo -e '\e[34mHello \e[1mWorld!\e[m' echo -e 'This is \e[4;42mANSI Escape sequences\e[m sample.'
以下のように出力文字列の装飾や色(文字色/背景色)を指定することができる。
Hello World! This is ANSI Escape sequences sample.
これは、出力文字列中にANSIエスケープシーケンスを含めることで、ターミナルソフトウェア(例えばTera TermやPuTTy、GNOME-terminal等)がANSIエスケープシーケンスに従って文字の描画モードを変更してくれるためだ。(もう少し詳しく言うと、文字の描画モードだけでなく、カーソルの移動、表示のクリアなども指定することができるらしい。)
記法
ANSIエスケープシーケンスは、ASCII文字のESC
(Escape:0x1B)から始まる文字列であり、様々なものが定義されている。(詳しくは参考リンク参照)
この内、描画モードに関するものは次の形式で定義されており、Valueに特定の数値を指定することで描画モードを設定できる。
ESC[Value;...;Valuem
なお、ESC
をBashの文字列リテラル中で記載する場合は\e
や\033
と記載する。
そのため、Bashの文字列リテラルにANSIエスケープシーケンスを含める場合は、冒頭のechoコマンドの引数のように\e[34m
(\033[34m
でもいい)のように記載する。
(また、echo の場合、文字列中のバックスラッシュ\
から始まるエスケープ文字を有効にするには-e
オプションが必要なので注意。)
コード
一般的に使われていると思われるコードは以下のとおり。 ただし、ターミナルによってサポートされていないものや違う効果になるものもあるので注意が必要。
属性リセット
コード | 効果 |
---|---|
0 | 属性リセット |
なお、コードが省略された場合\e[m
は\e[0m
として扱われる。
文字の装飾
コード | 効果 |
---|---|
1 | 太字 |
2 | 薄字 |
3 | タリック |
4 | アンダーライン |
5 | 遅いブリンク |
6 | 早いブリンク |
7 | 文字色と背景色の反転 |
8 | 表示を隠す |
9 | 取り消し線 |
53 | オーバーライン |
文字の装飾の終了
コード | 効果 |
---|---|
22 | 太字、薄字の終了 |
23 | イタリックの終了 |
24 | アンダーライン終了 |
25 | ブリンクの終了 |
27 | 文字色と背景色の反転の終了 |
28 | 表示を隠す |
29 | 取り消し線の終了 |
55 | オーバーラインの終了 |
ただし、ターミナルによってはサポートされていないものもあるため、文字の装飾をやめるのは\e[0m
属性リセットを実行したほうがよいかも。
文字色
コード | 効果 |
---|---|
30 | 黒 |
31 | 赤 |
32 | 緑 |
33 | 黄 |
34 | 青 |
35 | マゼンタ |
36 | シアン |
37 | 白 |
39 | デフォルト色 |
背景色
コード | 効果 |
---|---|
40 | 黒 |
41 | 赤 |
42 | 緑 |
43 | 黄 |
44 | 青 |
45 | マゼンタ |
46 | シアン |
47 | 白 |
49 | デフォルト色 |