私はBashスクリプトで(主にCentOSで)色を頻繁に使用しましたが、その使用をより便利にするために、結局redefining変数を色の値にしています。
_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しましたが、そこに色の定義に関連するものは見つかりませんでした。
そのような定義はすでに存在していますか?そうでない場合は、たとえば、それらを_/etc/rc.d/init.d
_のファイルに入れて、スクリプトに含めます。これは、_/etc/rc.d/init.d/functions
_と少し似ています。
あなたが求めていることには、いくつかの側面があります。
まず、bashは色を定義しません。実際、bashには色が存在することさえまったくわかりません。知っているのは、あなたが_\033[0;36m
_の文字を出力するように言ったことだけです。端末エミュレーター(xterm、gnome-terminalなど)は、これらの文字を受け取り、「シアンで出力を開始する必要がある」ことを理解します。
したがって、色を理解するのはターミナルエミュレータです。端末エミュレータは_\033[0;36m
_がシアンであることを理解しますが、別の端末エミュレータはシアンにまったく異なる文字セットを使用する場合があります(ただし、正真正銘のターミナルエミュレータが標準を誇張してこれを行うことはありません)。これがtput
の理由です。 _tput setaf 6
_を実行すると、tput
が端末のエスケープコードを色6(シアン)で検索し、そのエスケープコードを出力します。
(_tput setaf
_コードの詳細については この質問 を参照)
ここでbashに戻ります。お気づきかもしれませんが、私がシアン色を参照しているとき、私は_\033[0;36m
_ではなく_\[\033[0;36m\]
_を使用しています。角かっこがありません。角括弧の目的は、プロンプトでエスケープコード(色)を使用するときに、bashがどの文字が表示されないかを知る必要があることです(ゼロ幅、実際には何も表示しません)。したがって、表示されない文字は_\[
_ _\]
_で囲みます。これらの文字を削除すると、最初はすべて正常に動作するように見えるかもしれませんが、コマンドが端末の幅を超えると、あらゆる種類の奇妙さに遭遇し始めます。これは、タイプするときに、bashがコマンドを次の行に折り返すタイミングを知っている必要があるためです。これを行うには、プロンプトの幅と、入力した幅の幅を計算します。
tput
についての別の注記。 _CYAN="\[\033[0;36m\]"
_はCYAN="$(tput setaf 6)"
と同じnotです。先ほど説明したように、角括弧は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\]"
_
そのようなものが必要な場合は、~/.profile
に行を追加してください:
GRAY="\[\033[1;30m\]"
LIGHT_GRAY="\[\033[0;37m\]"
CYAN="\[\033[0;36m\]"
LIGHT_CYAN="\[\033[1;36m\]"
NO_COLOUR="\[\033[0m\]"
または、オンデマンドでのみ使用する場合は、$HOME
のファイルに追加して、スクリプトでソースを提供します。
. ~/.mycolors
グローバルに利用できるようにするには、代わりに/etc/profile
に追加します。いずれにせよ、この種のことは/etc/rc.d/init.d
でのビジネスはまったくありません。そのディレクトリはinitデーモンの設定スクリプト用であり、シェル変数の設定とは何の関係もありません。