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


73

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


恒久的または偶然?
ジェイコブVlijm 14

を使用することもできますdconf。以前に同様の質問への回答を書いたことがあります:askubuntu.com/a/628129/295286
Sergiy Kolodyazhnyy

\033[00;34mFOO\033[00m
ラファエルバロス

回答:


50

特定のXTerm / ANSI互換端末(xtermやなどgnome-terminal)では、デフォルトの8/16 色パレットよりも大きなパレットを使用して色を設定できます(たとえば、88色、256色、または16777216色(RGB)パレットを使用) ;両方xtermgnome-terminal、256色と16777216色(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

スクリーンショット1

スクリーンショット

色を前景に適用するか背景に適用するかに応じて、次のコマンド<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'

スクリーンショット3

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

スクリーンショット4

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

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'

スクリーンショット5

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

スクリーンショット6

いずれかの方法を使用printf '\e[0m'して、すべての属性をリセットするために使用できます。

スクリーンショット7


1
両方xtermgnome-terminal\ e [38/48; 2; R; G; Bmトゥルーカラーエスケープシーケンスを認識します。ただし、xterm256色パレットで実際の色を最も近い色に丸めます。gnome-terminalエスケープシーケンスで指定された正確なトゥルーカラーを表示します。
エグモント

2
\ e [Kは危険です。一部のエミュレーター(例xterm)カーソルが非常に右端にある場合(右端の列に視覚的に表示されますが、右端の列に文字が既に印刷されているので論理的にそれを超えています)、最後の文字が削除されます。例えばbugzilla.gnome.org/show_bug.cgi?id=740789またはsavannah.gnu.org/bugs/?36831を参照してください。
エグモント

自分自身の修正:行の先頭(プロンプトではなく、プロンプトの最後)で\ e [Kを出力する場合、もちろん安全です。(ただし、複数行のプロンプトまたはコマンドでは機能しません。)
egmont

@egmont有用な情報をありがとう、修正済みとしてマークされたGNOME Bugzillaで、これは事実ですか?この時点でこれをテストすることはできませんので、後で(最初に返信しない限り)確認して回答にその情報を含めます。
コス

うん最新バージョンのgnome-terminalはその文字を削除しません。これが正しい動作であるかどうかは疑わしいです。結局のところ、グラフィカル端末エミュレーターはいくつかの古代のデバイスをエミュレートしています。悪い設計上の決定をエミュレートする必要がありますか(xtermがここで行うように)、オーバーライドする必要がありますか(gnome-terminalで行うように)?これは、正解が1つもない難しい質問です。
エグモント

33

このページにある情報(プレビュー列を除く):

シーケンスは、エスケープ文字(しばしば「で表現で構成されている^[」または」<Esc>いくつかの他の文字が続く^[FCm「):」」(ここで、FC以下の箇条書きで数字の1です)。

ではbashEscコードは次のいずれかになります。

  1. \e
  2. \033 (8進数)
  3. \x1B (16進数)

注1: " \e[0m"シーケンスは、すべての属性(フォーマットと色)を削除します。各色付きテキストの最後に追加することをお勧めします。

注2:前景色と背景色は、端末の構成によって異なり、すべての色がサポートされているわけではありません

セット/リセット

  • 0:すべての修飾子、前景、および背景属性をリセット/削除します。 echo -e "\e[0mNormal Text"
  • 1:太字/明るい: echo -e "Normal \e[1mBold"
  • 2:薄暗い: echo -e "Normal \e[2mDim"
  • 4:下線付き: echo -e "Normal \e[4mUnderlined"
  • 5:点滅(XTerm以外のほとんどの端末では機能しません): echo -e "Normal \e[5mBlink"
  • 7:反転/反転: echo -e "Normal \e[7minverted"
  • 8:非表示(機密情報に便利): echo -e "Normal \e[8mHidden Input"
  • 21:ボールド/ブライトのリセット/削除: echo -e "Normal \e[1mBold \e[21mNormal"
  • 22:薄暗いリセット/削除: echo -e "Normal \e[2mDim \e[22mNormal"
  • 24:下線のリセット/削除: echo -e "Normal \e[4mUnderlined \e[24mNormal"
  • 25:点滅のリセット/削除: echo -e "Normal \e[5mBlink \e[25mNormal"
  • 27:反転/反転のリセット/削除: echo -e "Normal \e[7minverted \e[27mNormal"
  • 28:非表示のリセット/削除: echo -e "Normal \e[8mHidden \e[28mNormal"

前景

  • 39:デフォルト(通常は緑、白、または明るい灰色): echo -e "Default \e[39mDefault"
  • 30:ブラック:echo -e "Default \e[30mBlack"(最高の背景色と組み合わせます: echo -e "Default \e[30;107mBlack on white"
  • 31:赤(緑の背景には使用しないでください)
  • 32: 緑
  • 33: 黄
  • 34: 青
  • 35:マゼンタ/パープル
  • 36:シアン
  • 37: ライトグレー
  • 90: 暗灰色
  • 91: ライトレッド
  • 92:ライトグリーン
  • 93:薄黄色
  • 94: ライトブルー
  • 95:ライトマゼンタ/ピンク
  • 96:ライトシアン
  • 97: 白い

バックグラウンド

  • 49:デフォルトの背景色(通常は黒または青)
  • 40: ブラック
  • 41: 赤
  • 42: 緑
  • 43: 黄
  • 44: 青
  • 45:マゼンタ/パープル
  • 46:シアン
  • 47:ライトグレー(白い前景では使用しないでください)
  • 100:ダークグレー(黒の前景では使用しないでください)
  • 101: ライトレッド
  • 102:ライトグリーン(白い前景では使用しないでください)
  • 103:ライトイエロー(白い前景では使用しないでください)
  • 104:ライトブルー(前景がライトイエローの場合は使用しないでください)
  • 105:ライトマゼンタ/ピンク(明るい前景では使用しないでください)
  • 106:ライトシアン(白い前景では使用しないでください)
  • 107:白(前景が明るい場合は使用しないでください)

前景色と背景色の両方を一度に設定するには、ther formを使用しますecho -e "\e[S;FG;BGm"。例:(echo -e "\e[1;97;41m"赤い背景に太字の白い前景)

256色のオプションについては、ソースページを参照してください。


30

偶発的に色を変更する

偶発的に色を変更する場合

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

1
これらは、最初のsettermコマンドでは二重ダッシュにする必要があります。
user1770201

14.04で動作しましたが、16.04では動作しませんでした(ベータ。それが理由であるかどうかはわかりません)...それでも、dconf write /org/gnome/terminal/legacy/profiles:/:<profile_id>/background-color "'rgb(0,0,0)'"うまくいきました。
ジャナカバンダラ

ubuntu 1704で作業していない、見た目が悪い
Wax Cage

1
gconftool-2、または(Ubuntuの14.04と、おそらくいくつかの次のリリースの場合)dconfまたはgsettingsUbuntuの変更gnome-terminalのの設定の新しいバージョンに、そして上で即時に有効になり、すべてのタブと同じプロファイルの窓。OPはこの動作を探していなかったと思います。
エグモント

5

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

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

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

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

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


3

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

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

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アプローチとは異なり、これは現在の端末のみに影響します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.