Lから始まるLinux

3章28話
execコマンド
3章29話 ANSIエスケープシーケンス
もくじ
3章30話
expectコマンド
ANSI エスケープシーケンス
若木 みどり
お兄ちゃん! lsgrep などの出力に 色が使われていることがあるよね? 私のスクリプトでも色を使えないかな?
若木 しげる
もちろんできるよ! 今回は 「ANSI エスケープシーケンス (ANSI escape sequences)」 を学ぼう!
使い方
若木 しげる
「ANSI エスケープシーケンス」 画面の制御などを 文字列で表したものだよ
若木 みどり
例えば「緑色にする」という 意味を表す文字列を書けば 文字が緑色になるのね!
若木 しげる
そういうことだね 主に色に関係する ANSI エスケープシーケンスを 見てみよう!
ANSI エスケープシーケンス 役割
\e[30m 文字色を黒で表示
\e[31m 文字色を赤で表示
\e[32m 文字色を緑で表示
\e[33m 文字色を黄で表示
\e[34m 文字色を青で表示
\e[35m 文字色をマゼンタで表示
\e[36m 文字色をシアンで表示
\e[37m 文字色を白で表示
ANSI エスケープシーケンス 役割
\e[40m 背景色を黒で表示
\e[41m 背景色を赤で表示
\e[42m 背景色を緑で表示
\e[43m 背景色を黄で表示
\e[44m 背景色を青で表示
\e[45m 背景色をマゼンタで表示
\e[46m 背景色をシアンで表示
\e[47m 背景色を白で表示
ANSI エスケープシーケンス 役割
\e[0m 指定をリセット
\e[1m 文字を太字で表示
\e[2m 淡い色で表示
\e[3m 文字をイタリックで表示
\e[4m 文字をアンダーラインで表示
\e[5m 文字を点滅で表示
\e[6m 文字を高速点滅で表示
\e[7m 文字色と背景色を反転させて表示
\e[8m 文字を非表示
若木 みどり(笑顔)
色だけに色々あるんだね!
若木 しげる
これらの指定は 数値を「セミコロン(;)」 区切ることで同時指定できるんだ 例えば \e[42;2m 「淡い緑色の文字色」になるよ!
表示
若木 しげる
エスケープシーケンスの解釈には echo-e オプションを使うんだ
若木 みどり
さっそくやってみるね!
echo -e "\e[32;2;1m緑色のみどりです!"
若木 みどり
「緑、淡い色、太字」3つを指定してみたけどどうなるかな…?
緑色のみどりです!
若木 みどり(驚き)
おお!緑色で表示してくれた!
若木 みどり
でも echo を実行した後の出力も緑色になっちゃっているね
若木 しげる
それは「緑色で出力」という指定が生き続けているからだよこういう場合は出力の最後で指定をリセットしてあげるといいよ
echo -e "\e[32;2;1m緑色のみどりです!\e[0m"
若木 みどり
文字列の中にANSI エスケープシーケンスを混ぜると読みにくくなっちゃうね
若木 しげる
そういう場合は変数を使ったりecho を分割してあげよう
GREEN="\e[32;2;1m"
RESET="\e[0m"
echo -e "${GREEN}緑色のみどりです!${RESET}"
echo -en "\e[32;2;1m"
echo "緑色のみどりです!"
echo -en "\e[0m"
まとめ
若木 みどり
今回は ANSI エスケープシーケンスで画面の表示に色を付けられることを学んだよ!
若木 しげる
他にもさらに細かな色の指定やカーソルの位置の操作など様々な端末操作をANSI エスケープシーケンスで表現できるんだエラーメッセージを目立つ赤色で表示して気づきやすくするなどシェルスクリプトでも役に立つ機能だよ!
若木 しげる
また resetANSI エスケープシーケンスの指定も初期化してくれるよ指定を解除するのに便利なので一緒に覚えておこう!