ターミナル(コマンドプロンプト)の色やテキストを設定する。
成果物
問題
pythonのvenvをアクティブにしたときにPS1が無色になった。
解決
自前でPS1を作るスクリプトを書いた。
方法
環境変数PS1
に所定の書式を入力する。
.bashrc
ファイルのデフォルト設定は以下。
.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '
説明
項目 | 説明 |
---|---|
${debian_chroot} |
chroot でルートディレクトリを変更するときの表示 |
\u |
OSのユーザ名表示 |
\h |
OSのホストマシン名表示 |
\w |
ワーキングディレクトリパス表示 |
\u |
OSのユーザ名表示 |
\033[... |
ANSI_escape_code |
pythonのvenvはテキストを直接指定する。
色はANSI_escape_codeで設定している。
ANSI_escape_code
ESC Code | 説明 |
---|---|
\[...\] |
PS1にANSI_escape_codeを設定するときにこれでSGRを囲う。echo -e のときは不要 |
\033[...m |
SGR。文字や背景の色を設定する。... にSGR Parameterを入れる。値は0 ,01;31 などの数。0~107までの10進数。配列のときは; でつなげる。 |
SGR Parameter
ESC Code | 説明 |
---|---|
\033[0m |
SGRのリセット |
\033[31m |
SGRに31 (文字色=赤)をセット |
\033[91m |
SGRに91 (文字色=明るい赤)をセット |
\033[1;31m |
SGRに01;31 (1=Bold(太字), 31=文字色=赤)をセット |
たとえば、以下のようにターミナルでコマンドを実行すると、赤い文字が表示される。
$ echo -e '\033[31m赤い文字です'
つまり、{SGR}{任意テキスト}
とすると、指定したSGRで任意テキストを装飾できる。
色の指定方法
「\033[n
m」で指定する。n
に色を指定するSGR Parameterを入れる。
色の指定方法は3パターンある。(システムによって対応状況が違う。色数が少ないほど多くの環境でサポートされている)
色深度 | 文字色 | 背景色 | 例 |
---|---|---|---|
規定16色 | 30..37, 90..97 | 40..47, 100..107 | \033[31m |
規定256色 | 38;5;0..255 |
48;5;0..255 |
\033[38;5;128m |
24bit color | 38;2;R;G;B |
48;2;R;G;B |
\033[38;2;255;196;64m |
規定256色
いわゆるインデックスカラー。ただし各インデックスの色はシステム規定値であり、任意に変更できない。
値 | 説明 | 規定16色との対応 |
---|---|---|
0..7 | 黒、赤、緑、黄、青、マゼンタ、シアン、白 | 30..37 |
8..15 | 0..7の明るい色 | 90..97 |
232..255 | グレースケール(黒から白までの24段階) | 無し |
16..231 | 6bit color (216色)。16 + 36 * R + 6 * G + B (0 ≤ R,G,B ≤ 5) |
無し |
6bit colorを計算する関数を書いた。GetColor 5 2 0
などのようにRGBの3値を0..5の範囲で与えると、16..231の値を返す。その値X
を「\033[38;5;X
m」にセットする。
24bit color
いわゆるフルカラー。
R * G * B (0 ≤ R,G,B ≤ 255)
「\033[38;2;R
;G
;B
m」とする。SGRの書式に直接指定できる。ただし対応環境は最も少ない。
参考
- Ubuntuのデフォルト設定から学ぶbashプロンプト - Qiita
- プロンプトの確認や設定 - Pocketstudio.jp Linux Wiki
- ANSI escape code - Wikipedia
開発環境
- Raspberry Pi 3 Model B