shell 输出颜色文字

改变linux 终端颜色

提示行基础            

彩色化               

Xterm  中的乐趣       

            

            

 

如果您很容易使 shell  提示行变得色彩绚烂斓且带有更 多信息,为什么还要坚持用单调的标准 shell  提示行呢?在这篇技巧中,Daniel Robbins  将说明如何获得符合您的意愿的 shell  提 示行,并会说明如何动态更新 X  终端的标题栏。 

作为 Linux/UNIX  人,我们有很长的时间是在 shell  中工作,并且在许多情况下,下面这一行就是始终盯着我们的那个提示行:

bash-2.04$ 

如果您恰巧是超级用户 (root) ,您就有权使用下面这个 美丽的标示 身份 的提示行版本:    

bash-2.04$ 

这些提示行并不是十分漂亮。这也就难怪几种 Linux  版 本对默认提示行进行了升级,在其中增加了颜色和更多的信息。但是,即便您恰好有一个本身带有很好的彩色提示行的新式版本,它也不可能是完美无缺的。您或许 希望在提示行中增加或更改几种颜色,或者增加(或删除)一些信息。从头开始设计属于您自己的彩色的、经过装饰的提示行并不难。 

提示行基础:修改提示符显示

 bash  下,可以通过更改 PS1  环境变量的值来 设置提示行,如下所示:

$ export PS1=">; " 
>; 

 

更改会立即生效,通过将 "export"  定义放在您的 ~/.bashrc  文件中可将这种更改固定下来。只要您愿意,PS1  可 以包含任意数量的纯文本: 

$ export PS1="This is my super prompt >; " 
This is my super prompt >; 

 

尽管这很有趣,但在提示行中包含大量静态文本并不是特别有用。大多数定制的提示行包含诸如用户名、工作目录或主机名 之类的信息。这些花絮信息可以帮助您在 shell  世界中遨游。例如,下面的提示行将显示您的用 户名和主机名: 

$ export PS1="/u@/H >; " 
drobbins@freebox >; 

 

这个提示行对于那些以多个不同名称的帐户登录多台机器的人尤为有用,因为它可以提醒您:您目前在哪台机器上操作,拥 有什么权限。 

在上面的示例中,我们使用了专用的用反斜杠转义的字符序列,藉此通知 bash  将 用户名和主机名插入提示行中,当这些转义字符序列出现在 PS1  变量中时,bash  就会用特定的值替换它们。我们使用了序列 "/u" (表 示用户名)和 "/H" (表示主机名的第一部分)。下面是 bash  可 识别的全部专用序列的完整列表(您可以在 bash man page  "PROMPTING"  部分找到这个列表): 

序 列  说明 
/a ASCII  响铃字符(也可以键入 /007 
/d "Wed Sep 06" 
格式的日期            
/e ASCII 
转义字符(也可以键入 /033 
/h 
主机名的第一部分(如 "mybox" 
/H 
主机的全称(如 "mybox.mydomain.com" 
/j 
在 此 shell  中通过按 ^Z  挂起的进 程数 
/l 
 shell  的 终端设备名(如 "ttyp4" 
/n 
换 行符 
/r 
回车符 
/s shell 
的 名称(如 "bash" 
/t 24 
小 时制时间(如 "23:01:01" 
/T 12 
小 时制时间(如 "11:01:01" 
/@ 
带 有 am/pm  12  小时制时间 
/u 
用户名 
/v bash 
的 版本(如 2.04 
/V Bash 
版 本(包括补丁级别) ?/td>; 
/w 
当前工作目录(如 "/home/drobbins" 
/W 
当 前工作目录的 基名 (basename)” (如 "drobbins" 
/! 
当前命令 在历史缓冲区中的位置 
/# 
命令编号(只要您键入内容,它就会在每次提示时累加) 
/$ 
如果您不是超级用户 (root) , 则插入一个 "$" ;如果您是超级用户,则显示一个 "#" 
/xxx 
插入一个用三位数 xxx (用零代替未使用的数字,如 "/007" )表示的 ASCII  字符 
// 
反斜杠 
/[ 
这个序列 应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash  能够正确计算自动换行。 
/] 
这个序列应该出现在非打印字符序列之后。 

 

这样,您已经知道了 bash  中用反斜杠转义的全部专用序 列。请稍微演练一下这些序列,以对它们的工作方式获得一些感性认识。在您做了一些测试之后,

下面开始添加颜色。 

彩色化 

添加颜色相当容易;第一步是设计不带颜色的提示行。然后,我们所要做的只是添加终端(而不是 bash )可识别的专用转义序列,以使它以彩色显示文本的某些部分。标准 Linux  终端和 X  终端允许您设置前景(文字) 颜色和背景颜色,如果需要,还可以启用 "bold"  字符。有八种颜色可供我们选择。 

颜色是通过在 PS1  中添加专用序列来选择的 --  基本上是夹在 "/e[" (转义开方括号)和 "m"  之间数字值。如果指定一个以上的数字代码,则用分号将它们分开。

下面是一个颜色代码示例:

"/e[0m" 

 

如果将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在提示行结束时使用 这个代码,以使您键入的文字成为非彩色的。现在,让我们看一下这些颜色代码。请注意下面的抓屏结果:

 

 

颜色表 

  前景              背 景               颜色
   ---------------------------------------
   30                40               
黑色
   31                41               
紅 色
   32                42               
綠色
   33                43               
黃色
   34                44               
藍色
   35                45               
紫紅色
   36                46               
青藍色
   37                47               
白色

 

 

  代码               意义
   -------------------------
   0                 OFF
   1                 
高亮显示
   4                 underline
   5                 
闪烁
   7                 
反 白显示
   8                 
不可见

 

要使用这个表,首先请查找您要使用的颜色,然后查找对应的前景编号 (30-37)  和 背景编号 (40-47) 。例如,如果您喜欢黑底绿字,则可将编号分别设为 32  40 。然后打开您的提示行定义并在其中添加 适当的颜色代码。下面的定义: 

 

export PS1="/w>; " 

  变为: 

export PS1="/e[32;40m/w>; " 

到现在为止,提示行尽管已经很不错了,但仍不太完美。在 bash  显 示出工作目录以后,我们需要使用 "/e[0m"  序列将颜色重新设置为正常值。 

export PS1="/e[32;40m/w>; /e[0m" 

 

这个定义将显示一个漂亮的绿色提示行,但我们仍需要做一些扫尾工作。我们不需要包括 "40"  这个背景颜色设置,因为它将背景设置为黑色,而黑色是默认颜色。此外,绿色还很暗;我们通过添加一 个 "1"  颜色代码来修正这个问题,这将启用更亮的加粗文字。除了这个修改之外,我们还需要将全 部非打印字符用专用的 bash  转义序列 "/["  "/]"  括起来。这两个序列通知 bash ,被括 起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。没有这两个转义序列,尽管您有了一个非常漂亮的提示行,但是如果您键入的命令恰好到 达终端的最右端,就会造成显示混乱。

 

下面是我们最终的提示行: 

export PS1="/[/e[32;1m/]/w>; /[/e[0m/]" 

别担心在同一个提示行中使 用几种颜色,就像下面这样: 

export PS1="/[/e[36;1m/]/u@/[/e[32;1m/]/H>; /[/e[0m/]" 

 

 

 

 

 

 

Xterm  中的乐趣 

 

我已说明了如何在提示行中添加信息和颜色,但您还可以更进一步。您可以通过在提示行中添加专用代码来使 X  终端(如 rxvt  aterm )的标题栏得到动态更新。您所要做的只是将下面的序列添加到您的 PS1  提示行中:

 

"/e]2;titlebar/a" 

 

只须用您希望其出现在 xterm  标题栏中的文字替换子串 "titlebar"  即可,现在已经一切就绪了!不必使用静态文字;您可以将 bash  转义序列插入标题栏中。请查看下面这个示例,它将用户名、主机名和当前工作目录显示在标题栏中,并 定义了一个简短、明亮的绿色提示行: 

 

export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>;/[/e[0m/] " 

 

这就是我在上面的抓屏结果中所用的那个提示行。我喜欢这个提示行,因为它将全部信息显示在标题栏上,而不是显示在终 端上,终端对一行可以显示多少字符有限制。顺便提一句,确保用 "/["  "/]"  将您的标题栏序列括起来(因为就终端而言,这个序列是非打印序列)。将大量信息放在标题栏中的问题 是,如果您使用非图形终端(如系统控制台),则看不到这些信息。为了解决这个问题,可以在您的 .bashrc  中 添加以下几行: 

 

 

 

 

 

 

if [ "$TERM" = "linux" ] 
then 
#we're on the system console or maybe telnetting in 
export PS1="/[/e[32;1m/]/u@/H >; /[/e[0m/]" 
else 
#we're not on the console, assume an xterm 
export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>;/[/e[0m/] " 
fi 

 

这个 bash  条件语句将根据当前的终端设置动态设置提示 行。为了获得一致性,您一定希望配置您的 ~/.bash_profile ,以便它在启动时搜索 (source)  您的 ~/.bashrc 。确保 您的 ~/.bash_profile  文件中有以下这样一行: 

 

source ~/.bashrc 

 

这样,无论您开启一个登录 shell  还是一个非登录 shell ,都会获得 同样的提示行。 

好了,您已掌握了提示行魔术。现在尽情享受一下,制作一个漂亮 的彩色提示行吧! 

你可能感兴趣的:(工作,linux,shell,bash,图形,终端)