如前所述,非打印转义序列必须用以下字符括起来\[\033[和\]。 对于颜色转义序列,它们还应后跟一个小写字母m.
如果您在 xterm 中尝试以下提示符,但发现没有看到指定的颜色,请检查您的~/.Xdefaults文件(以及可能的同类文件)中是否有如下行XTerm*Foreground: BlanchedAlmond。 可以通过在其前面放置一个感叹号(“!”)来注释掉此行。 当然,这也将取决于您使用的终端模拟器。 这是您的终端前景色最有可能被覆盖的地方。
要在提示符中包含蓝色文本
PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ " |
此提示符的问题在于,以颜色代码 34 开头的蓝色永远不会切换回常规颜色,因此您在提示符后键入的任何文本仍将是提示符的颜色。 这也是一种深蓝色阴影,因此将其与粗体代码结合使用可能会有所帮助
PS1="\[\033[1;34m\][\$(date +%H%M)][\u@\h:\w]$\[\033[0m\] " |
现在提示符为浅蓝色,并且通过将颜色切换回无(无论您之前拥有什么前景色)来结束。
以下是其余的颜色等效项
Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37 |
Daniel Dui (ddui@iee.org) 指出,为了严格准确起见,我们必须提到上面的列表是针对控制台颜色的。 在 xterm 中,代码1;31不是“浅红色”,而是“粗体红色”。 这对所有颜色都是如此。
您还可以通过使用 44 表示蓝色背景,41 表示红色背景等来设置背景颜色。 没有粗体背景颜色。 可以使用组合,例如蓝色背景上的浅红色文本\[\033[44;1;31m\],尽管分别设置颜色似乎效果更好(即\[\033[44m\]\[\033[1;31m\])。 其他可用的代码包括 4:下划线,5:闪烁,7:反色和 8:隐藏。
![]() | 许多人(包括我自己)强烈反对“闪烁”属性,因为它非常分散注意力且令人恼火。 幸运的是,它在我所知道的任何终端模拟器中都不起作用 - 但它仍然可以在控制台上工作。 |
![]() | 如果您想知道(就像我一样)“‘隐藏’属性有什么用?!” - 我看到它在一个示例 shell 脚本(不是提示符)中使用,以允许某人输入密码而不会将其回显到屏幕。 但是,除了“Xterm”之外,许多终端似乎都不支持此属性。 |
基于 Bashprompt 包中名为“elite2”的提示符(我已经对其进行了修改,使其在标准控制台上更好地工作,而不是使用查看原始文件所需的特殊 xterm 字体),这是一个我经常使用的提示符
function elite { 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\]" case $TERM in xterm*|rxvt*) local TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) local TITLEBAR="" ;; esac local temp=$(tty) local GRAD1=${temp:5} PS1="$TITLEBAR\ $GRAY-$CYAN-$LIGHT_CYAN(\ $CYAN\u$GRAY@$CYAN\h\ $LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\ $CYAN\#$GRAY/$CYAN$GRAD1\ $LIGHT_CYAN)$CYAN-$LIGHT_CYAN(\ $CYAN\$(date +%H%M)$GRAY/$CYAN\$(date +%d-%b-%y)\ $LIGHT_CYAN)$CYAN-$GRAY-\ $LIGHT_GRAY\n\ $GRAY-$CYAN-$LIGHT_CYAN(\ $CYAN\$$GRAY:$CYAN\w\ $LIGHT_CYAN)$CYAN-$GRAY-$LIGHT_GRAY " PS2="$LIGHT_CYAN-$CYAN-$GRAY-$NO_COLOUR " } |
我将颜色定义为临时 shell 变量,以提高可读性。 它更容易使用。 “GRAD1”变量是一个检查,用于确定您所在的终端。 就像确定您是否在 Xterm 中工作的测试一样,它只需要完成一次。 您看到的提示符看起来像这样,除了颜色
--(giles@gcsu202014)-(30/pts/6)-(0816/01-Aug-01)-- --($:~/tmp)-- |
为了帮助自己记住有哪些颜色可用,我编写了一个脚本,将所有颜色输出到屏幕。 Daniel Crisman 提供了一个更好的版本,我将其包含在下面
#!/bin/bash # # This file echoes a bunch of color codes to the # terminal to demonstrate what's available. Each # line is the color code of one forground color, # out of 17 (default + 16 escapes), followed by a # test use of that color on all nine background # colors (default + 8 escapes). # T='gYw' # The test text echo -e "\n 40m 41m 42m 43m\ 44m 45m 46m 47m"; for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ ' 36m' '1;36m' ' 37m' '1;37m'; do FG=${FGs// /} echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; done echo; done echo |