这些是ANSI转义序列 ; 该链接指向颜色代码图表,但该Wikipedia页面上还有其他有趣的内容。并非所有人都可以在(例如)普通的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
通过中的一些shell代码将$ TERM变量设置为256色终端/etc/profile
。在其他情况下,您应该能够配置终端以使用此功能。这将使TUI应用程序知道有256种颜色,并允许您将类似的内容添加到您的~/.bashrc
:
if [[ "$TERM" =~ 256color ]]; then
PS1="MyCrazyPrompt..."
fi
当心在提示中使用颜色转义序列时,应将它们括在转义的(带\
前缀)方括号中,如下所示:
PS1="\[\033[01;32m\]MyPrompt: \[\033[0m\]"
请注意,[
颜色序列的内部没有转义,而封闭了内部。后者的目的是向外壳指示封闭的序列不计入提示的字符长度。如果该计数是错误的,则当您回滚历史时会发生奇怪的事情,例如,如果它太长,则最后一个滚动字符串的多余长度将显示在提示中,并且您将不能退格到它(它与提示的方式一样被忽略)。
还要注意,如果您希望每次使用该提示时都包含命令运行的输出(而不是在设置提示时一次),则应将其设置为带单引号的文字字符串,例如:
PS1='\[\033[01;32m\]$(date): \[\033[0m\]'
尽管如果您对使用bash的特殊转义符\d
或\D{format}
快速转义符感到满意,这不是一个很好的例子-这不是问题的主题,但是可以在man bash
under中找到PROMPTING
。还有其他各种有用的转义符,例如\w
当前目录,\u
当前用户等。
1.此图表的主要部分颜色16-231(注意,它们不是按数字顺序排列)是6 x 6 x 6 RGB颜色立方体。“颜色立方体”是指可以使用三维数组(一个轴用于红色,一个轴用于绿色,一个轴用于蓝色)表示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"
\]
此处的最终字体实际上不是颜色序列的一部分。它的目的是专门设置提示(关于这一点,我在回答的末尾添加了几段)。 “如果还有一种更具可读性的表格,那就太好了。” ->在您自己的答案中剪切n'paste是执行此操作的一种方法。