[PHP]在bash中输出彩色文本

授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/389)的形式标明文章原始出处和作者信息及本声明。

先看图吧:

PHP在bash中输出彩色文本

乱不乱?这是我自己用的一个web游戏机器人程序的输出,游戏自然一切都是数字说了算,可每次看这一大堆数字实在是让我头疼,从中找出有用的数据太难了,对齐、缩进都办法也不怎么见效,突然我想到,如果用escape 输出彩色的文本,应该看起来会舒服很多吧?

说到escape ,用过的人应该都见过,只是不知道它叫这么名字而已。ls中彩色的文件、目录名就是用escape 来实现的。早些年用得比较多的telnet形式的bbs,它的颜色也是escape ,最明显的特征就是bbs文章被转贴到别处的时候,经常会多出一些ESC什么的字符出来,这就是escape 的控制字符。

想完整的了解escape ,资料很多,wikipedia - ANSI escape code就有比较完整的解释,中文的资料也不少,比如啦啦~在bash下输出彩色的文本,甚至还有人做出了颜色表:The 256 color mode of xterm

不用觉得眼花缭乱,简单说来,escape code就是在终端(terminal)中输出的控制字符,不光包括文字颜色,还可以控制很多其它内容,当然,颜色是比较常用的,所以习惯称之为escape 。我在这里也只讲颜色,其它控制字符的使用方式大同小异,但需要主意不同的终端类型可能会略有区别。

escape 的格式为:

<ESC>[{attr};{fg};{bg}m

其中<ESC>[是起始字符,在中一般是16进制的0×1b,也就是八进制的033,十进制的27,另外一种表现方式就是^[,熟悉吧,在中按一下Ctrl+v再按ESC它就出来了。后面分别是attr模式、fg前景色、bg背景色,中间用逗号;间隔,最后用字母m结尾。

attr的取值有:

0   Reset All Attributes (return to normal mode) #重置所有设置,回归自然
1   Bright (Usually turns on BOLD) # 高亮/加粗
2   Dim
3   Underline
5   Blink
7   Reverse
8   Hidden

fg的取值有:

30  Black
31  Red
32  Green
33  Yellow
34  Blue
35  Magenta
36  Cyan
37  White

bg的取值有:

40  Black
41  Red
42  Green
43  Yellow
44  Blue
45  Magenta
46  Cyan
47  White

可以看到,attr/fg/bg的用值范围不重叠,所以空缺哪个无所谓。

在用输出的时候,只需要在正常字符串内容中,加入适当的escape 代码就可以了,其实其它应用程序也是类似操作的,并不需要额外的设置,比如:

$  -r ‘echo “\x1b[5;31;44m第一种色彩\x1b[3;34;41m第二种色彩\x1b[0m 回归自然\n”;’

看到彩色了吧?秀一下我那个机器人美化之后的界面:

PHP在bash中输出彩色文本

顺便说一句,把字符串储存到文件中的时候,escape 也可以一起存上的,浏览时,cat和tail默认就支持颜色显示,less则需要带上-R参数才行。

Tags: , ,

Related posts

2 Responses to “[PHP]在bash中输出彩色文本”

  1. 戴耳钉的猫 Says:

    Gold 2,603,649,618
    ………………..
    真有钱啊…..
    看上去好像MUD似的呢?

    勾起了我去搞MUD的冲动呢……. :)

    [Reply]

  2. Fwolf Says:

    钱多是因为通货膨胀。。。。

    不是mud,是网页游戏,网站在这里:http://www.standardwarfare.com/

    人不是很多,比较简单。

    [Reply]

Leave a Reply

您的留言将被缓存和审阅,所以不会立即出现在这里,请别着急,着急的话可以给我发邮件 :-)
支持Markdown Extra语法,参见: [甲] [1] [2]