端末エミュレータの色に問題があります。私はそれをLXTerminal
ターミナルエミュレータとLXDE
デスクトップ環境として使用します。
次のコマンドは、灰色の背景に赤いテキストを印刷する必要があります。
printf "\n\033[1;31;40m"hello"\033[00m\n\n"
しかし、これはうまくいきません。灰色の背景がありません(赤いテキストも機能します)。私の古いコンピュータ(Gnome/Gnome Terminal
)では、すべてがうまくいきました。
他の複数の端末エミュレータをインストールしてみましたが、問題は解決しません。この問題がターミナルエミュレータに関連しているのか、それとも何なのかよくわかりません。コンソール(CTRL + ALT + F1)では、背景グレーは両方のシステムで機能しません。
この問題は灰色の背景に制限されます。他のすべての色はうまく機能します。たとえば、次は緑色の背景に赤いテキストを印刷します。
printf "\n\033[1;31;42m"hello"\033[00m\n\n"
助けてくれてありがとう。トラブルシューティングをどこから始めるべきかさえわかりません。
答え1
各端末エミュレータは8つの標準ANSI色をサポートしています。ほとんどの端末エミュレータには、標準のANSI色の8つの明るいバリエーションもあります。
しかし、エスケープコードがマッピングされる実際の色値は標準化されておらず、実際には端末エミュレータごとにわずかに異なる場合が多い。したがって、printf "\e[31;47mTest\n"
白い背景に赤いテキストを印刷する場合、実際に表示される赤と白のトーンは、使用する端末エミュレータによって異なります。
したがって、これは問題を部分的に説明します。色の値が標準ではなく、LXTerminal
慣れていない他の基本パレットがあるかもしれません。設定を見ると、通常は好きな色でカラースキームを構成できます。
直面するもう1つの問題は、太い属性が実際に実行する作業も標準化されていないことです。 3つの可能性があります。フォントを太字にしたり、前景色を明るくしたり、前景色を明るくしたり、フォントを太字にしたりできます。
ここでも、デフォルトの動作は端末エミュレータによって異なり、通常は正しい設定が見つかったら変更できます。 Grepは「bold」または「bright」への言及を探します。
明るい色を使用するには、太字の代わりにいわゆるaixtermカラーエスケープコードを使用できます。これは標準ではありませんが、私が知っているすべての最新の端末エミュレータはそれをサポートしています。太字のフォントとは異なり、常に明るい色を使用し、明るい背景色を表示するために使用できます。
たとえば、明るい白地に明るい赤いテキストを印刷するには、次のようにしますprintf "\e[91;107mTest\n"
。
ちなみに、以下はすべてのカラーエスケープコード表です。
| ANSI | ANSI | ANSI | | Aixterm | Aixterm
| Color | FG Code | BG Code | Bright Color | FG Code | BG Code
+---------+---------+-------- +----------------+---------+--------
| Black | 30 | 40 | Bright Black | 90 | 100
| Red | 31 | 41 | Bright Red | 91 | 101
| Green | 32 | 42 | Bright Green | 92 | 102
| Yellow | 33 | 43 | Bright Yellow | 93 | 103
| Blue | 34 | 44 | Bright Blue | 94 | 104
| Magenta | 35 | 45 | Bright Magenta | 95 | 105
| Cyan | 36 | 46 | Bright Cyan | 96 | 106
| White | 37 | 47 | Bright White | 97 | 107
答え2
1
最初のプロパティは1;31;40
「太字」(別名「明るく」)モードを設定しますが、一部の端末では前景色にのみ適用されます。前景は16色をサポートしているので、何が理由なのかわかりません($TERM変数を変更しても違いはありません)。1 0(ソース40
:4 =背景、0 =色)は実際には黒ですが、「光沢のある黒」は灰色です。これには2つの解決策があります。
色7(白)は白ではなく灰色で表示されることがあります(真の白の場合は「明るい白」が必要です。つまり、実際には白い背景を持つことができないことを意味します)。
必要に応じて、LXDEでgnome端末を使用できる必要があります。ただインストールして起動します
gnome-terminal
(コマンド名だと思います)。次に、lx ターミナルの代わりにそれを使用するようにランチャーを構成する必要があります。
1私の推測は次のとおりです。太字に設定すると、前景色に明るさが適用されます。そして太い強調が追加されました。したがって、太字を適用しないと、明るい前景色は使用できません。モノクロ端末が一般的だった頃は、次のようなことを強調するために、単に太字で設定するのが一般的でした。\\033[1mBlah blah\\033[0m
- 実際、これはまだ機能しますが、前景色をより明るくします。背景を明るくすることも望ましくないと思ったら(太字で表示する必要があるため)、実装ではそうしないようにします。ああ、まあ。
答え3
これは、一部の端末エミュレータで使用できるトリックです。ビデオ反転プロパティ(7)を使用して明るい前景色を選択し、背景色と置き換えると明るい背景色が表示されます。
echo -e "\e[1;32;7mText on a bright green background"
問題は16の背景色を使用できるようになりましたが、8つの色の制限が前景/テキストに適用されることです。問題をさらに混乱させるには、ビデオ反転プロパティが有効になっている場合は、背景色のプロパティコードを使用してテキストの色を設定する必要があります。
答え4
代わりに、背景は太字の白で表示されます47=background white
。40=background black
]# printf "\033[0;30;47m"hello"\033[00m\n"
hello (black on grey)
]# printf "\033[1;30;47m"hello"\033[00m\n"
hello (darkgrey on grey)
]# printf "\033[1;37;47m"hello"\033[00m\n"
hello (white on grey)
]# printf "\033[0;37;47m"hello"\033[00m\n"
hello (INVISIBLE grey on grey)
デフォルトでは、太い黒は暗い灰色を生成します。太い白が白なので、普通の白は実際には灰色です。
このループは、黒のすべての色と白の色の組み合わせを含む2つの列を印刷します。
for ((i=30; i<=47; i++))
do
echo -en "\e[${i}mHello\e[0m";
echo -e "\e[1;${i}mHello\e[0m";
done
目に見えない黒と黒の背景に濃い灰色で始まりますが、残りの17行も大丈夫に見え、コンソール全体のカラーパレットを示しています。
(38と39は無視する必要がありますが、単純化のために30から47のみを使用します)
A. 言及を受け入れる八色と標準の欠如。
6つの色31-36(赤からターコイズまで)が明確に定義されています。黒(30)と白(37)もありますが、特に背景(40と47)でボールドした変形が少ないです。
私は気づきました:xtermでは、一般的な白いテキストが灰色の背景に表示されますが、Linuxコンソールには表示されません。 (最後の行、i = 47)(30分前までは読めないバリエーションが欲しくなかったため、スクリプトは46で停止しました)
両方の位置をマウスで選択すると、きれいに調整され、反転しても読みやすい状態に保たれます。