Bash PS1プロンプトでどのカラーコードを使用できますか?

Bash PS1プロンプトでどのカラーコードを使用できますか?

bash PS1プロンプトで複数の色を使用しています。たとえば、次のようになります。

\033]01;31\] # pink
\033]00m\]   # white
\033]01;36\] # bold green
\033]02;36\] # green
\033]01;34\] # blue
\033]01;33\] # bold yellow

利用可能なカラーコードのリストはどこにありますか?

私が探していますBashコンソールカラーカラー化しかし、実際のコードリストに関する私の質問には答えません。

もっと読みやすいテーブルもあればよさそうです。

また見なさい:PS1プロンプト表示時間、ユーザー、ホスト、ディレクトリ、およびGitブランチを作成する方法

答え1

人々はANSIエスケープシーケンス;リンクはカラーコードチャートにリンクされていますが、そのウィキペディアページには他に興味深いものがあります。たとえば、通常のLinuxコンソールでこれらすべてを実行できるわけではありません。

これは正しくありません。

\033]00m\] # white

0端末をデフォルト値(おそらく白)にリセットします。白い前景の実際のコードは37です。また\]、末尾のエスケープされた閉じ括弧()は色の順序の一部ではありません(ヒントの設定の目的については、下の最後の段落を参照)。

一部のGUI端末では、カスタムカラースキームを指定できます。これは出力に影響を与えます。

持つここにリストがあります以前見たことのない7つの前景色と7つの背景色を追加しましたが、うまく機能しているようです。

# Foreground colors
90   Dark gray  
91   Light red  
92   Light green    
93   Light yellow   
94   Light blue 
95   Light magenta  
96   Light cyan  

# Background colors
100  Dark gray  
101  Light red  
102  Light green    
103  Light yellow   
104  Light blue 
105  Light magenta  
106  Light cyan 

また、256色のGUI端末がある場合(最近はほとんどそうです)、このチャートの色を適用できます。

xterm 256カラーカード

これを選択するためのANSIシーケンスは左下の数字を使用し、38;5;前景と48;5;背景から始まる色番号を使用します。たとえば、次のようになります。

echo -e "\\033[48;5;95;38;5;214mhello world\\033[0m"

黄褐色の淡いオレンジ色を呈します(つまり、カラーチャートはおおよその近似です)。

端末に表示される色をチャート1で簡単に確認できます。

#!/bin/bash

color=16;

while [ $color -lt 245 ]; do
    echo -e "$color: \\033[38;5;${color}mhello\\033[48;5;${color}mworld\\033[0m"
    ((color++));
done  

出力は自明です。

xterm-256color256色の端末を使用すると、一部のシステムが通過する可能性があり、/etc/profile他の場合はそれを使用するように端末を構成できます。これにより、TUIアプリケーションは256の色があることを認識し、次の色を追加できます~/.bashrc

if [[ "$TERM" =~ 256color ]]; then
     PS1="MyCrazyPrompt..."
fi

プロンプトでカラーエスケープシーケンスを使用する場合は、次\のようにエスケープされた(プレフィックス付き)角括弧で囲む必要があります。

PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"

[カラーシーケンスの内側部分はエスケープされませんが、外部カラーシーケンスはエスケープされます。後者の目的は、含まれているシーケンスがプロンプトの文字長に含まれていないことをシェルに表示することです。その数が間違っていると、履歴をスクロールするときに奇妙なことが起こります。たとえば、履歴が長すぎると、最後にスクロールした文字列の追加の長さがプロンプトに追加され、元に戻せなくなります。 out.latticeを追加します(プロンプトのように無視されます)。

また、プロンプトが使用されるたびに実行されるコマンドの出力を含めるには(プロンプトが設定されたときに一度だけ実行されるのではなく)、単一引用符を含むリテラル文字列に設定する必要があります。たとえば、次のようになります。

PS1='\[\033[01;32m\]$(date): \[\033[0m\]'

これは良い例ではありませんが、bashの特殊\dまたは\D{format}プロンプトエスケープを使用したい場合は、質問のトピックではありませんが、man bash以下にありますPROMPTING\w現在のディレクトリ、\u現在のユーザーなど、さまざまな便利なエスケープ文字があります。


1.チャートの主要部分である色16 - 231(番号順ではない)は、6 x 6 x 6 RGBカラーキューブです。 「カラーキューブ」とは、RGBカラースペースを3次元配列(1軸は赤、1軸は緑、1軸は青)を使用して表現できることを意味します。ここで、キューブの各色は6 x 6 x 6配列の座標で表示でき、チャートのインデックスは次のように計算されます。

    16 + R * 36 + G * 6 + B

キューブの最初の色(図のインデックス16)は黒(RGB 0、0、0)です。シェルスクリプトでは、次の式を使用できます。

#!/bin/sh                                                         

function RGBcolor {                                               
    echo "16 + $1 * 36 + $2 * 6 + $3" | bc                        
}                                                                 

fg=$(RGBcolor 1 0 2)  # Violet                                            
bg=$(RGBcolor 5 3 0)  # Bright orange.                                            

echo -e "\\033[1;38;5;$fg;48;5;${bg}mviolet on tangerine\\033[0m"

答え2

リストの少なくとも一部は次のとおりです。

txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m'   # Black - Background
bakred='\e[41m'   # Red
bakgrn='\e[42m'   # Green
bakylw='\e[43m'   # Yellow
bakblu='\e[44m'   # Blue
bakpur='\e[45m'   # Purple
bakcyn='\e[46m'   # Cyan
bakwht='\e[47m'   # White
txtrst='\e[0m'    # Text Reset

に基づいてhttps://wiki.archlinux.org/index.php/Color_Bash_Prompt

答え3

役に立つ場合は、すべての色を表示するbash関数を作成しました。

function colorgrid( )
{
    iter=16
    while [ $iter -lt 52 ]
    do
        second=$[$iter+36]
        third=$[$second+36]
        four=$[$third+36]
        five=$[$four+36]
        six=$[$five+36]
        seven=$[$six+36]
        if [ $seven -gt 250 ];then seven=$[$seven-251]; fi

        echo -en "\033[38;5;$(echo $iter)m█ "
        printf "%03d" $iter
        echo -en "   \033[38;5;$(echo $second)m█ "
        printf "%03d" $second
        echo -en "   \033[38;5;$(echo $third)m█ "
        printf "%03d" $third
        echo -en "   \033[38;5;$(echo $four)m█ "
        printf "%03d" $four
        echo -en "   \033[38;5;$(echo $five)m█ "
        printf "%03d" $five
        echo -en "   \033[38;5;$(echo $six)m█ "
        printf "%03d" $six
        echo -en "   \033[38;5;$(echo $seven)m█ "
        printf "%03d" $seven

        iter=$[$iter+1]
        printf '\r\n'
    done
}

.bashrc/.bash_profile/.bash_aliasesに入れるか、スクリプトとして保存してそのように実行することができます。下の私の名前のように、色を使用して色を変更できます。

colorgrid() 出力: colorgrid() の出力

次のようにして、.bash_profileで私の名前を変更しました。

if [ "$USER" = "plasmarob" ]; then
    p="\[\033[01;38;5;52m\]p"
    l="\[\033[01;38;5;124m\]l"
    a="\[\033[01;38;5;196m\]a"
    s="\[\033[01;38;5;202m\]s"
    m="\[\033[01;38;5;208m\]m"
    a2="\[\033[01;38;5;214m\]a"
    r="\[\033[01;38;5;220m\]r"
    o="\[\033[01;38;5;226m\]o"
    b="\[\033[01;38;5;228m\]b"
    local __user_and_host="$p$l$a$s$m$a2$r$o$b"
else
    local __user_and_host="\[\033[01;36m\]\u"
fi   

...

export PS1="$__user_and_host $__cur_location $__git_branch_color$__git_branch$__prompt_tail$__last_color "

文字列の01プレフィックスは太字で\[\033[01;38;5;214m\]a 表示されます。

答え4

@goldilocksと@Michael Durrantの答えに基づいて、次のように読みやすくすることができます。

CYAN="\[\e[01;36m\]"
WHITE="\[\e[01;37m\]"
BLUE="\[\e[01;34m\]"
TEXT_RESET="\[\e[00m\]"   
TIME="\t"
CURRENT_PATH="\W"
ROOT_OR_NOT="\$"

export PS1="${CYAN}[${BLUE}${TIME}${WHITE} ${CURRENT_PATH}${CYAN}]${ROOT_OR_NOT}${TEXT_RESET} "

結果は次のとおりです。

時事

関連情報