web-dev-qa-db-ja.com

テキストの色と端末の背景を変更しますか?

設定で色を変更できますが、コマンドラインで端末の背景色とテキスト色を変更するにはどうすればよいですか?

72
TechJhola

特定のXTerm/ANSI互換端末(xtermgnome-terminalなど)では、デフォルトの8/16色パレットよりも大きいパレットを使用して色を設定できます(たとえば、88色、256 -colorsまたは16777216-colors(RGB)パレット; xtermgnome-terminalは、256色と16777216-colors(RGB)パレットの両方をサポートします。シェルがこれをオーバーライドする可能性があることに注意してください(これは、たとえばzshの場合です)。

256色パレットをサポートするXTerm/ANSI互換端末で、256色パレットの色とANSIカラーコードをリストするスクリプトを次に示します。

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "\e[48;5;${i}m%03d" $i;
    printf '\e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf '\n'
done

screenshot1

screenshot

色を前景に適用するか、背景に適用するかに応じて、次のコマンドで<fg_bg>または38(それぞれ)の48値を使用します。

printf '\e[<fg_bg>;5;<ANSI_color_code>m'

たとえば、前景色(<fg_bg> = 38)を赤(<ANSI_color_code> = 196)に設定し、背景色(<fg_bg> = 48)黒へ(<ANSI_color_code> = 0):

printf '\e[38;5;196m Foreground color: red\n'
printf '\e[48;5;0m Background color: black\n'

screenshot3

背景色を行全体に適用し、前景色をカーソルに適用するには、printf '\e[K'を使用してプロンプトを再描画する必要があります。

screenshot4

互換性のある端末では、ANSIカラーコードの代わりにRGB値を使用しても同じことが実現できます。色を前景に適用するか背景に適用するかに応じて、次のコマンドで<fg_bg>または3848値を使用します(それぞれ)。

printf '\e[<fg_bg>;2;<R>;<G>;<B>m'

たとえば、前景色(<fg_bg> = 38)を赤(<R> = 255<G> = 0<B> = 0)と背景色(<fg_bg> = 48)を黒(<R> = 0<G> = 0<B> = 0):

printf '\e[38;2;255;0;0m Foreground color: red\n'
printf '\e[48;2;0;0;0m Background color: black\n'

screenshot5

繰り返しますが、背景色を行全体に適用し、前景色をカーソルに適用するには、printf '\e[K'を使用してプロンプトを再描画する必要があります。

screenshot6

どちらの方法でも、printf '\e[0m'を使用してすべての属性をリセットできます。

screenshot7

47
kos

偶発的に色を変更する

偶発的に色を変更することを意図している場合

setterm コマンドを使用できます。

setterm -term linux -back <background_colour> -fore <text_color> -clear

色から選択できます(前面と背景の両方):

black|blue|green|cyan|red|Magenta|yellow|white|default

その他のオプション:

setterm -help

プロファイル(色)設定を変更する

14.04では、dconfを使用して色または端末を設定するオプションが見つかりませんでした。ただし、gconftoolを使用できます

  • 最初にプロファイル名を取得する必要があります。

    gconftool-2 --get /apps/gnome-terminal/global/profile_list
    
  • 次に、プロファイルのテキストの色を設定するには:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/foreground_color" --type string "#FFFFFF"
    

    たとえば、テキストの色を白に設定するには

    背景色と同じ:

    gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string "#000000"
    

    たとえば、背景色を黒に設定するには

または、色の名前を設定するには、settermコマンドと同じパレットから、単にwhiteまたはgreenを使用できます。例:

gconftool-2 --set "/apps/gnome-terminal/profiles/<profile_name>/background_color" --type string black
30
Jacob Vlijm

カラー出力の取得に使用されるさまざまなカラーコードは、 カラーの背景 の取得にも使用できます。

40  black
41  red
42  green
43  yellow
44  blue
45  Magenta
46  cyan
47  white

したがって、次のコマンドは背景を赤に変えます。

$ echo -e '\e[0;41m'

シェル、ターミナルエミュレータなどによっては、-eが不要な場合があります。

5
muru

前景または背景をパレットの特定の色、または一部の端末での直接のRGB色に切り替えることに関するkosの回答を参照してください。このようなシーケンスの効果は、別の色が選択される(またはデフォルトに戻される)まで続きます。

一部の端末エミュレーターでサポートされている別のアプローチは、redefine端末の正確なRGB値デフォルト OSC 10/11エスケープシーケンスを使用した前景色と背景色です。

echo -ne '\e]10;#123456\e\\'  # set default foreground to #123456
echo -ne '\e]11;#abcdef\e\\'  # set default background to #abcdef

これははるかに長く続く可能性が高く(別のOSC 10/11で上書きされるか、OSC 110/111でリセットされるまで)、dconfアプローチとは異なり、現在の端末のみに影響します。

3
egmont