我可以在 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
在哪裡可以找到可以使用的顏色程式碼列表?
我查看了Colorize Bash Console Color但它沒有回答我關於實際程式碼列表的問題。
如果也有更易讀的形式,那就太好了。
這些是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 終端(我想現在大部分都是),你可以從這個圖表中應用顏色:
選擇這些的 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 bash
在PROMPTING
. 還有各種其他有用的轉義符,例如\w
目前目錄、\u
目前使用者等。
- 此圖表的主要部分,顏色 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"