首先熟悉颜色代码的“通用”表示:
对于两位的数字:
第一位数字为3表示定义的是前景色, 为4表示背景色。
第二位数字定义具体的颜色. 1 为Red, 2为Green, 3为Blue, 0表示黑色。
举例: 31;40m 表示前景为红色, 背景色为黑色。
前景背景色之间用;来分隔. 以字符m表示定义的结束, 如果没有前景或背景的定义则沿用当前的设置。单个的数字0表示是较暗的颜色, 为1表示是较亮的颜色, 这个较亮较暗都是指前景色而言。
以上所说的"通用"是一般的字符终端的驱动所理解的颜色代码的表示法, 当然, 颜色表示必需是一个比较少会出现的特殊字符序列开始的. 这个序列是:
[[ 其中^[的ASCII的27, 也就是通过由Escape输入的值, 在终端命令行上, 需要用〈C-V〉ESC 来输入它。
下面是我们可以在哪些方面变得好色:
1. 命令行的提示字符串
在这里定义颜色千万要注意用 [表示特殊序列的开始, 用]表示特殊序列的结束, 否则终端驱动会错误地计算提示字符串应该占用多少个字符的空间, 因为象 ^[[31;40m 这么多字符其实并不占用屏幕上的输出空间, 其目的只是改变颜色而已。
2. ls --color
初步好色的人才会老老实实地输入长长的 --color, 老色鬼早就用alias把自己隐藏起来了。
具体什么文件用什么颜色显示要看 LS_COLORS环境变量的内容了, 这个环境变量内容实在是长, 不过定义它不必一个一个敲进去, dircolors 命令可以从 /etc/DIR_COLORS 中读取一个可读形式的颜色定制方案, 然后转换成一个压缩版的环境变量, 注意dircolors的输出是一个命令, 这个命令本身需要你的当前shell去执行才会生效。
需要 eval "$(dircolors /etc/DIR_COLORS)" 才会在你的当前环境中加入LS_COLORS变量. 在子SHELL中执行它将不会惠及父进程。
3. grep --color
我曾经设想过为黑白时代的grep加入高亮其颜色支持的功能, 不想已经先于我被实现出来了. 这可能不是POSIX对grep规范的一部分, 但实在是好处多多, 尤其对于初涉正则表达式的人来说, 它不但让你得到匹配的行, 还以醒目的方式告诉你这一行的哪个部分匹配到了你的正则表达式, 因而会被匹配到grep -P 'ab+' <<输出的是abbbbbbbbbbbbb
从头到尾都是红的
输出的也是
abbbbbbbbbbbbb
只有开头的ab两个字符才是红色的。
4. 为任意的输出着色
grep只会显示那些匹配的行, 或不匹配的行, 所以它无法同时显示那些不匹配的行, 比如, 下面是cvs的输出: