Thursday, October 6, 2011

[转载]终端提示符设置(PS1变量配置)

 原文http://linux.cuit.edu.cn/?p=1090
使用linux大部分时间都是呆在终端之中,所以一个好看的提示符是很有必要的,下午花了点时间看了哈PS1变量的配置,总结了一下分享给大家,希望对大家有点帮助哈。
大家无论用什么发行版本的Linux,termianl的提示符都是差不多的类似下面这样的:
username@hostname:PATH>或者bash-4.1.7$
而且颜色和默认字体颜色一样,这样时间久了难免感觉有些单调,不过好在Linux可定制性非常强,这里我们只需要对PS1变量进行配置就可以让提示符显示我们想要他显示的内容 ,同时使用我们自己喜欢的颜色。
提示符内容配置:
直接在termial中修改PS1变量就可以改变当前环境的提示符,选到自己喜欢的就可以写进.bashrc文件了:
可以把任意文本写入提示符中:
> PS1=”This is my terminal:>”
This is my termianl:>
This is my termianl:> PS1=”GO$”
GO$
当然,这样尽管很好玩,但却不怎么实用,有时我们会想让提示符中显示一些提示的东西:
GO$ PS1=”\u@\h:>”
suse@suse:>
suse@suse:> PS1=”\u@\h:\w>”
suse@suse:~>
suse@suse:~> cd mywork
suse@suse:~/mywork>
上面的例子中使用了反斜杠转义的字符序列,通知bash用特定的值替换他们,bash可识别的转义序列有下面这些:
\u 用户名
\h 主机名第一部分
\H 主机名全称
\w  当前工作目录(如 “/home/username/mywork”)
\W  当前工作目录的“基名 (basename)”(如 “mywork”)
\t   24 小时制时间
\T  12 小时制时间
\@  带有 am/pm 的 12 小时制时间
\d   “Sat Dec 18″ 格式的日期
\s shell 的名称(如 “bash”)
\v bash 的版本(如 2.04)
\V Bash 版本(包括补丁级别)
\n 换行符
\r 回车符
\\ 反斜杠
\a ASCII 响铃字符(也可以键入 07)
\e ASCII 转义字符(也可以键入 33)
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。
\] 这个序列应该出现在非打印字符序列之后。
知道了全部的转义序列,就可以对自己的终端提示符进行定制了。
提示符颜色配置:
我们设计好提示符内容之后就可以给他们添加颜色,添加颜色就是添加终端(而不是 bash)可识别的专用转义序列,以使它以彩色显示文本的某些部分。标准 Linux 终端和 X 终端允许您设置前景(文字)颜色和背景颜色,如果需要,还可以启用 “bold” 字符。有八种颜色可供我们选择(用数字表示)。
前景 背景 颜色
—————————————
30      40      黑色
31       41      红色
32       42     绿色
33       43     黄色
34       44     蓝色
35       45     紫红色
36       46     青蓝色
37       47    白色
代码 意义
————————-
0      OFF
1       高亮显示
4       下划线
5       闪烁                 #闪烁这个选项在我机子上没反应,所以就没有验证,不知道是否可以哈
7      反白显示
8      不可见
现在我们可以依据上面的颜色表为提示符添加颜色啦:
下面的定义:
PS1=”\w> ”
变为:
PS1=”\e[32;40m\w> "
到现在为止,提示行尽管已经很不错了,但仍不太完美。在 bash 显示出工作目录以后,我们需要使用 "\e[0m" 序列将颜色重新设置为正常值。
PS1="\e[32;40m\w> \e[0m"
这个定义将显示一个漂亮的绿色提示行,但仍需要做一些扫尾工作。有时我们不需要包括 "40" 这个背景颜色设置,因为它将背景设置为黑色,而黑色是默认颜色。此外,绿色还很暗;我们通过添加一个 "1" 颜色代码来修正这个问题,这将启用更亮的加粗文字。除了这个修改之外,还需要将全部非打印字符用专用的 bash 转义序列 "\[" 和 "\]” 括起来。这两个序列通知 bash,被括起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。没有这两个转义序列,尽管我们有了一个非常漂亮的提示行,但是如果键入的命令恰好到达终端的最右端,就会造成显示混乱。下面是最终的提示行:
PS1=”\[\e[32;1m\]\w> \[\e[0m\]”
我们也不用担心在同一个提示行中使用几种颜色,就像下面这样(我的颜色配置):
PS1=\[\e[36;1m\]\u@suse:\[\e[32;1m\]\w\[\e[36;1m\]> \[\e[0m\]
但是,当我们把这个配置写入.bashrc文件后,会发现一个问题,那就是terminal的标题栏变成了一个永恒不变的“Termianl”了, 这可能并不是我们希望的,默认的显示用户名、主机名和当前工作路径(我比较喜欢这个默认的哈),我们可能希望把他配回来。其实配置标题栏和上面说过的配置 提示符内容差不多,只是要加上:
\e]2;…\a
中间省略号就可以加我们想让标题栏显示的内容了。
例如我们把 ”\e]2;This is my terminal:>\a” 加进PS1变量中(当然也需要用”\["和"\]“转义序列括起来),标题栏中就会显示  This is my terminal:>
我比较喜欢默认的方式哈,所以我就加进去了 “\e]2;\u@\h:\w\a”,最后配置完成的结果就是:
PS1=”\[\e]2;\u@\h:\w\a\]\[\e[36;1m\]\u@suse:\[\e[32;1m\]\w\[\e[36;1m\]> \[\e[0m\]”
希望对想配置提示符的同学有帮助哈,呵呵

No comments: