ターミナルカラーエスケープシーケンスはbashのどこでも定義されていますか?


22

私はBashスクリプトで色を頻繁に使用しました(ほとんどはCentOSで)が、より使いやすくするために、変数を色の値に再定義することになりました。

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

またはともtput

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

/etc/rc.d/init.dディレクトリの周りをgrep'edしましたが、色の定義に関連するものはそこに見つかりませんでした。

すでにそのような定義はありますか?そうでない場合は/etc/rc.d/init.d、たとえばファイルに入れて、スクリプトに含めるようにします。/etc/rc.d/init.d/functions


これらは\e[1;30m、たとえば、技術的にはグレーを表すものではなく、むしろ端末によって通常グレーとして表示されるカラースロットではないためです。端末エミュレーターは、実際の表示色を自由に変更でき、多くの場合、ユーザーが構成可能なオプションにします。
chepner 14

回答:


36

あなたが求めていることには、いくつかの側面があります。

まず、bashは色を定義しません。実際、bashには色が存在することすらまったくわかりません。それが知っているのはあなたがキャラクターを出力するように言ったこと\033[0;36mです。端末エミュレータ(xterm、gnome-terminalなど)はこれらの文字を受け取り、「シアンで出力を開始する必要がある」ことを理解します。

したがって、色を理解するのはターミナルエミュレータです。端末エミュレータ\033[0;36mはシアンを理解しますが、別の端末エミュレータはシアンに対してまったく異なる文字セットを使用する可能性があります(ただし、標準を誇示してこれを行う正しい端末エミュレータはありません)。これがの理由ですtput。を実行するとtput setaf 6tput端末の色6(シアン)のエスケープコードが検索され、そのエスケープコードが出力されます。
(コードの詳細については、この質問を参照してくださいtput setaf

bashに戻ります。お気づきかもしれませんが、私がシアン色について言及しているときは\033[0;36m、ではなくを使用してい\[\033[0;36m\]ます。角かっこがありません。角括弧の目的は、プロンプトでエスケープコード(色)を使用する場合、bashはどの文字が印刷されていないか(幅0、実際には何も表示しない)を知る必要があることです。したがって、非印刷文字をで囲みます\[ \]。これらの文字を削除すると、最初はすべて正常に動作するように見えますが、コマンドが端末の幅を超えると、あらゆる種類の奇妙な状態に陥り始めます。これは、入力時に、bashがコマンドを次の行にラップするタイミングを知る必要があるためです。これを行うには、プロンプトの幅を計算してから、入力した幅を計算します。

別のメモ、についてtput。はと同じものでCYAN="\[\033[0;36m\]"はありませんCYAN="$(tput setaf 6)"。先ほど説明したように、角括弧はbashに関連してtputおり、ターミナルエスケープコードのみを出力します。

角括弧は通常プロンプトにのみ関係するため、スクリプトなどの出力で色を使用している場合は使用しないでください。つまり、プロンプト以外にも色を使用する場合は、複数の変数を定義する必要があります。1つはプロンプトで使用するための角括弧付きで、もう1つは他のすべてで使用します。ただし、プロンプトで色を参照するたびに角括弧を手動で追加できます。

要するに、次のようなものを定義したいと思うでしょう。

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Ctrl+ Alt+ を使用して実際の端末にログインすると、どのように色が表示されF1ますか?
セルジュストローバンド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.