これらはANSIエスケープシーケンスです。このリンクはカラーコードのチャートへのリンクですが、ウィキペディアのページには他にも興味深いものがあります。それらのすべてが(たとえば)通常のLinuxコンソールで動作するわけではありません。
これは間違っています:
\033]00m\] # white
0
端末をデフォルト(おそらく白)にリセットします。白い前景の実際のコードは37です。また、最後のエスケープされた閉じ中括弧(\]
)は色シーケンスの一部ではありません(プロンプトを設定する目的の説明については、最後のいくつかの段落を参照してください)。
一部のGUI端末では、カスタマイズされた配色を指定できることに注意してください。これは出力に影響します。
ありますここにリスト 7フォアグラウンドと私は前に見たことがなかった7つの背景色が追加されますが、彼らが動作するようです:
# Foreground colors
90 Dark gray
91 Light red
92 Light green
93 Light yellow
94 Light blue
95 Light magenta
96 Light cyan
# Background colors
100 Dark gray
101 Light red
102 Light green
103 Light yellow
104 Light blue
105 Light magenta
106 Light cyan
さらに、256色のGUIターミナルがある場合(それらのほとんどは今だと思います)、このチャートから色を適用できます。
これらを選択するためのANSIシーケンスは、左下隅の番号を使用し38;5;
て、前景と48;5;
背景、次に色番号の順に開始されます。たとえば、次のようになります。
echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"
黄褐色に明るいオレンジ色を与えます(つまり、カラーチャートはおおよそ近似しています)。
ターミナルに表示される色は、このチャート1でかなり簡単に確認できます。
#!/bin/bash
color=16;
while [ $color -lt 245 ]; do
echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
((color++));
done
出力は一目瞭然です。
一部のシステムは、のxterm-256color
シェルコードを介して256色の端末を使用している場合に$ TERM変数を設定し/etc/profile
ます。他では、これを使用するように端末を設定できるはずです。これにより、TUIアプリケーションは256色があることを認識し、次のように追加できます~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
プロンプトでカラーエスケープシーケンスを使用する場合は、次のようにエスケープ(\
プレフィックス)角括弧で囲む必要があることに注意してください。
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
[
色シーケンスの内部はエスケープされていませんが、囲んでいるものはエスケープされていることに注意してください。後者の目的は、囲まれたシーケンスがプロンプトの文字長にカウントされないことをシェルに示すことです。そのカウントが間違っていると、履歴をスクロールバックすると奇妙なことが起こります。たとえば、長すぎると、最後にスクロールされた文字列の余分な長さがプロンプトに添付され、バックスペースすることができなくなりますそれ(プロンプトと同じように無視されます)。
また、プロンプトが使用されるたびに実行されるコマンドの出力を含める場合(プロンプトが設定されるときに1回だけではなく)、単一引用符付きのリテラル文字列として設定する必要があることに注意してください。
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
これは偉大な例ではありませんが、あなたはbashの特別の使用に満足している場合\d
や\D{format}
、質問のトピックではなく、中に見つけることができます-プロンプトエスケープman bash
の下にPROMPTING
。\w
現在のディレクトリ、\u
現在のユーザーなど、他にもさまざまな便利なエスケープがあります。
1.このチャートの主要部分である色16〜231(数字の順序ではないことに注意)は、6 x 6 x 6 RGBカラーキューブです。「カラーキューブ」とは、RGB色空間を3次元配列を使用して表すことができるという事実を指します(赤の軸、緑の軸、青の軸)。ここのキューブの各色は、6 x 6 x 6配列の座標として表すことができ、チャートのインデックスは次のように計算されます。
16 + R * 36 + G * 6 + B
キューブの最初の色は、チャートのインデックス16で黒です(RGB 0、0、0)。この式はシェルスクリプトで使用できます。
#!/bin/sh
function RGBcolor {
echo "16 + $1 * 36 + $2 * 6 + $3" | bc
}
fg=$(RGBcolor 1 0 2) # Violet
bg=$(RGBcolor 5 3 0) # Bright orange.
echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"
\]
は実際にはカラーシーケンスの一部ではないことに注意してください。これは、特にプロンプトを設定する目的に役立ちます(これに関する回答の最後にいくつかの段落を追加しました)。 「もっと読みやすいフォームがあればいいと思います。」->独自の回答でのカットアンドペーストは、これを行う1つの方法です。