Bash

我可以在 bash PS1 提示符中使用哪些顏色程式碼?

  • October 28, 2021

我在 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

在哪裡可以找到可以使用的顏色程式碼列表?

我查看了Colorize Bash Console Color但它沒有回答我關於實際程式碼列表的問題。

如果也有更易讀的形式,那就太好了。

另請參閱https://unix.stackexchange.com/a/127800/10043

這些是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-256color如果您在 256 色終端上,某些系統會通過/etc/profile. 在其他情況下,您應該能夠配置您的終端以使用它。這將使 TUI 應用程序知道有 256 種顏色,並允許您將以下內容添加到您的~/.bashrc:

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

請注意,當您在提示符中使用顏色轉義序列時,應將它們括在轉義(\前綴)方括號中,如下所示:

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

請注意,[顏色序列的內部沒有被轉義,但封閉的卻被轉義。後者的目的是向 shell 表明封閉的序列不計入提示符的字元長度。如果該計數錯誤,當您向後滾動歷史記錄時會發生奇怪的事情,例如,如果它太長,最後一個滾動字元串的多余長度將顯示在您的提示中,您將無法退格進入它(它被忽略的方式與提示相同)。

另請注意,如果您想在每次使用提示時都包含命令執行的輸出(而不是在設置提示時只包含一次),您應該將其設置為帶單引號的文字字元串,例如:

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

\d儘管如果您對使用 bash 的特殊或提示轉義感到滿意,這不是一個很好的例子\D{format}——這不是問題的主題,但可以man bashPROMPTING. 還有各種其他有用的轉義符,例如\w目前目錄、\u目前使用者等。


  1. 此圖表的主要部分,顏色 16 - 231(注意它們不是按數字順序排列的)是一個 6 x 6 x 6 RGB 顏色立方體。“顏色立方體”是指可以使用 3 維數組(紅色一個軸,綠色一個軸,藍色一個軸)來表示 RGB 顏色空間這一事實。此處立方體中的每種顏色都可以表示為 6 x 6 x 6 數組中的座標,圖表中的索引計算如下:
   16 + R * 36 + G * 6 + B

立方體中的第一種顏色,在圖表中的索引 16 處,是黑色 (RGB 0, 0, 0)。您可以在 shell 腳本中使用此公式:

#!/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"

引用自:https://unix.stackexchange.com/questions/124407