Bashターミナルでは、色を変更する信頼できる方法はANSIエスケープシーケンスを使用することです。例えば:
echo -e "\033[0;31mbrown text\033[0;00m"
出力する必要があります
brown text (in brown)
ANSIで特定のRGBセットを使用して色を出力する方法はありますか?明るい赤が欲しいと言う:
echo -e "**\033[255:0:0m**red text\033[0;00m"
この種のものは存在しますか?
標準のbashを使いたいだけです。
これは存在しますが、OPが探していた16777216(256 ^ 3)色の代わりに、256色のより大きなセットに216(6 ^ 3)の均等に分散された色があります。例:
echo -e "\033[38;5;208mpeach\033[0;00m"
これは、楽しい種類の桃色のテキストを出力します。
このコマンドを分解:\ 033 [38; 5; 208m
\ 033はエスケープコードです。 [38;は、コマンドをフォアグラウンドに送ります。代わりに背景色を変更したい場合は、代わりに[48;を使用してください。 5;は、色が変化するシーケンスの一部です。そして、最も重要な部分208mは、実際の色を選択します。
このエスケープのための256色のシーケンスで見つけることができる色の3つのセットがあります。最初のセットは、基本的な「キャンディー」カラーセット、または0〜15の値です。次に、16〜231の分散色の立方体があります。最後に、232-255の詳細なグレースケールセットがあります。
これらのすべての値を含む表をここに見つけることができます: http://bitmote.com/index.php?post/2012/11/19/Using-ANSI-Color-Codes-to-Colorize-Your- Bash-Prompt-on-Linux#256%20(8-bit)%20Colors
ここでの両方の回答では、8bpcカラーの TruecolorANSI support について言及していません。これにより、OPが最初に要求したRGBカラーが取得されます。
;5
の代わりに;2
を使用し、[〜#〜] r [〜#〜]、[を指定します〜#〜] g [〜#〜]、および[〜#〜] b [〜#〜]次の3つの値(0-255)制御セグメント。
\x1b[38;2;40;177;249m
テストするには 端末がTruecolorをサポートしている場合 :
printf "\x1b[38;2;40;177;249mTRUECOLOR\x1b[0m\n"
私のマシンでは、XTermは問題なく正しい色を出力しました。ただし、最新のRGBカラーより前の端末をモデルにした端末は、通常、トゥルーカラーをサポートしません。エスケープコードのこの特定のバリアントを使用する前に、ターゲットを確認してください。
38
と;5
/;2
-Blue Ice 言及38
がルーティングしてから5
色を変更します。それは少し間違っています。
38
は、xterm-256の拡張前景カラーコードです。 30
-37
は、16色のフォアグラウンドコードです(明るさは、一部のシステムではエスケープコード1
で制御され、引数としてサポートされている90
-97
によって制御されます)すべてのvt100/xterm準拠のカラー端末でサポートされている非標準の「明るい」コード)。
;2
および;5
は、色の形式を示し、最終的にプルするシーケンスの数を端末に伝えます。;5
は、1つだけを必要とする8ビット形式を指定します(Blue Iceが言及)。より多くの制御セグメント、および3つの制御セグメントを必要とする完全な24ビットRGB形式を指定する;2
。
これらの拡張モードは技術的に「文書化されていない」ものであり、完全に実装定義されています。私が知り、調査できる限り、それらはANSI委員会の管理下にありません。
そのように傾斜した場合、5;
(256色)形式は、元の16色(暗い/明るいの両方で30-37と90-97)から始まり、色0-15になります。
続く216色(16〜231)は、16だけオフセットされた3bpc RGB値によって形成され、単一の値にパックされます。
最後の24色(232〜256)は、黒よりわずかに明るい色合いから、白よりわずかに暗い色合いまでのグレースケールです。一部のエミュレータはこれらのステップを3つのチャネルすべてで(256 / 24
)からの線形増分として解釈しますが、これらの値を明示的に定義していると思われるエミュレータに遭遇しました。
これは、すべての灰色を考慮に入れて、このような変換を実行するJavaScript関数です。
function rgbToAnsi256(r, g, b) {
// we use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (r === g && g === b) {
if (r < 8) {
return 16;
}
if (r > 248) {
return 231;
}
return Math.round(((r - 8) / 247) * 24) + 232;
}
var ansi = 16
+ (36 * Math.round(r / 255 * 5))
+ (6 * Math.round(g / 255 * 5))
+ Math.round(b / 255 * 5);
return ansi;
}
したがって、ある方法で、端末でプログラム的に行いたい場合に256エンコードされた値を形成するために、8ビットから3ビットに減らすことにより、初期RGB値から 計算 256 ANSIカラーを作成できます。 Truecolorはサポートされていません。
現在、トゥルーカラーエスケープシーケンス(\ e [38; 2; R; G; Bm)は、gnome-terminal(vte> = 0.36)、konsole、st [suckless]などの特定のターミナルエミュレータでサポートされています。
機能はnotです。 pterm [PuTTY]、用語[啓蒙]、urxvt。
xtermはその中間です。エスケープシーケンスは認識しますが、256色パレットで最も近い色にすべての色を丸めます。