Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4729929
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2008-12-25 22:32:42

在 ANSI 兼容终端(例如 xterm、rxvt、konsole 等)里, 可以用彩色显示文本而不仅仅是黑白。 本文示范了如何使用粗体和彩色的文字。

    相信每一位Linux使用者都要面对 Bash。 虽然第一眼看上去非常枯燥,但是又很多方法能够让你的 shell 足够的个性化。 shell 提示符的彩色增强让能够让你的 shell 独一无二, 而且还非常清晰易读。

在本文中我以 Bash shell 为例。因为在不同的终端里的转义序列不完全相同, 所以在本文中我使用的是 ANSI 终端。 

  shell 彩色配置出现在 bash 的个人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc 里面。 可以通过bashrc 里面的 PS1 变量来设置提示符的外观。

一般默认的情况下.bashrc里面应该是:

                 ~/.bashrc

                  export    PS1=' \u@\h:\w\$ '

                  上面的意思是:用户@主机:当前目录 $

                   -->这也是大家都非常熟悉的shell提示符 。

转义序列

要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[ .这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27,等于用八进制表示的 033)。

要直接在 shell 里面输入转义序列我们需要先按 ctrl-v:CTRL-v ESC 

下面进入主题,说下该如何用shell的颜色。我用我自己的shell颜色设置详细说明.

 linuxshellinfo

代码:

        PS1="\[\033[1;32;40m[\033[0;32;40m\u@\h:\033[1;35;40m\w\033[1;32;40m]\033[1;31;40m\$\033[1;32;40m \]"

最外边的"\[    \]"是为了把转义序列的字符串括起来,防止转义序列的文本显示在 shell 里占用太多的空间。

\033 声明了转义序列的开始,然后是 [ 开始定义颜色。 后面的 0 定义了默认的字体宽度,接着的中间的数字定义字符颜色。最后面的数字定义了字符背景色。字母m是定义本身所必须的,字母m后面的字符就是你想改变的字符了。

 可选颜色:红色、绿色、黄色、蓝色、洋红、青色和白色。 他们对应的颜色代码是:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)。

用同样色方法设置背景色,不过要把第一个数字“3”替换成“4”, 例如 40、41、42、43、44、45、46、47。

比如上面我的定义中: 最后显示的结果是在$号之前的字符全部用一个浅绿色的中括弧扩起来。$字符 显示为红色。后面的输入显示为高亮浅绿色。在括弧里面,用户名@主机显示为深绿色,路径显示为洋红。

用代码解释:

Ps1 ="\[ -------------> 最外面的括弧

                 \033[1;32;40m[

           ----> 定义最右边的" [ " ;

        1:字体宽度,好像有加亮功能.

        32:字符颜色。32表示绿色。

        40:背景色,40表示黑色。

               \033[0;32;40m\u@\h:

        --------->定义右边的 \u@\h:  这几个字符颜色。

             0: 默认字体宽度。

            32:字符颜色。绿色。

            40:  背景颜色。黑色。

               \033[1;35;40m\w

        ---------> 定义右边的 \w  (路径颜色) 。

            1:字符宽度。加亮。

           35:字符颜色。洋红。

           40:背景色。黑色。

                     \033[1;32;40m]

      ---------> 定义右边的  ]  字符。跟前面的   [   字符使用同一效果。

                     \033[1;31;40m\$

      ---------> 定义了  $  字符 为红色。转义字符,所以前面加了 \ .

          颜色都跟前面差不多。相信大家都发现规律了。

                      \033[1;32;40m

      ----------> 这个定义了你在命令行要输入命令显示的颜色。

                       \]"

     -----------> 字符串结束括弧。

这个就是上面例子的详细定义内容。

其实我的是没有关闭颜色转义序列,让自己输入的字符也改变颜色,整天看这黑白屏幕不爽哇!!如果不想改变输入颜色的话,用 \033[0m 关闭转义序列, \033[0m 是 shell 的默认颜色。按照上面的例子来说就是在 \]" 前面加上 \033[0m 即可。

够简单吧?

看看root下的shell:

rootshowG

这个也不错,是 Nico Golde的:

PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"


nico@ ebrain: ~$

这里还有更多的颜色组合,是通过bash shell脚本实现的所有颜色组合。你可以挑选你自己喜欢的任意一种。

  colorforbash

 

文本属性

刚才提到了,在第一个转义序列后面的“0”是提示符的文本的默认颜色设置。 对于文本属性来说,这些值是有意义的:0、1、22、4、24、5、25、7、27, 分别表示:默认值、粗体、非粗体、下划线、非下划线、闪烁、非闪烁、 反显、非反显。

通过下面这一段短小的脚本,我们可以看看色彩组合。

#!/bin/sh

############################################################

# Nico Golde Homepage:

# Last change: Mon Feb 16 16:24:41 CET 2004

############################################################


for attr in 0 1 4 5 7 ; do

echo "----------------------------------------------------------------"

printf "ESC[%s;Foreground;Background - \n" $attr

for fore in 30 31 32 33 34 35 36 37; do

for back in 40 41 42 43 44 45 46 47; do

printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back

done

printf '\n'

done

printf '\033[0m'

done

原文地址:

阅读(5413) | 评论(4) | 转发(1) |
给主人留下些什么吧!~~

ubuntuer2009-01-03 15:01:06

其实我也发现这个问题了,找了好久没没找到答案. 你要是找到了的话说下阿^_^

chinaunix网友2009-01-03 13:05:22

有个问题,比如输入一个字符,然后猛按退格,然后提示符会被删掉,不知道为何

ubuntuer2008-12-29 18:24:13

满意了,对不起俺只是一届学生,还没有版权这个意识

zhainx2008-12-29 14:02:18

投诉了