2011年10月27日星期四

Bash 命令提示符

Bash 命令提示符是由环境变量PS1控制的,PS2控制命令多行输入时的提示符。Bash提供了
一些转义字符,供定制PS1(当然如果要定制PS2也可以使用,但一般很少定制PS2吧)时使用。
以下列举一些常用的:
  1. \h 主机名字
  2. \u 当前用户名字
  3. \w 当前工作目录
  4. \$ UID为0时(也就是root)效果为#,否则为$
  5. \t 当前二十四小时制时间
  6. \T 当前十二小时制时间
  7. \[ 开始一串非打印字符
  8. \] 非打印字符串结束

提示符颜色

还可以给提示符添加颜色,也是通过在PS1中使用特定的序列来实现的。"\e["表示颜色序列
的开始。后面紧跟表示颜色的数字,不同的数字代表不同的颜色,有些表示前景色,有些表
示背景色,有些表示光标闪烁颜色,数字间用“;"分隔,且没有顺序关系,最后"m"表
示颜色序列的结束。后续的字符将按照颜色序列的定义显示,直到"\e[0m"重置为默认值。

比如一个可能的PS1为:“export PS1="\e[32;40m\w> \e[0m”

编码 颜色动作
0 重新设置属性到缺省设置
1 设置粗体
2 设置一半亮度
4 设置下划线
5 设置闪烁
7 设置反向图象
22 设置一般密度
24 关闭下划线
25 关闭闪烁
27 关闭反向图象
30 设置黑色前景
31 设置红色前景
32 设置绿色前景
33 设置棕色前景
34 设置蓝色前景
35 设置紫色前景
36 设置青色前景
37 设置白色前景
38 在缺省的前景颜色上设置下划线
39 在缺省的前景颜色上关闭下划线
40 设置黑色背景
41 设置红色背景
42 设置绿色背景
43 设置棕色背景
44 设置蓝色背景
45 设置紫色背景
46 设置青色背景
47 设置白色背景
49 设置缺省黑色背景


\[ 和 \]的作用


还要特别提一下\[ 和 \]的作用,它通知Bash两者间的字符为非打印字符,
当Bash计算提示符长度时,会忽略这一串字符。这是很有必要的,比如对于定义颜色的特殊
序列,就应该包含在其中,因为颜色序列并非打印字符。如果没有将非打印字符(比如颜色
序列)包含在\[和\]之间,当输入较短命令时不会有问题,但是当输入长命令,超过使用的
终端窗口的宽度时,因为Bash将非打印字符都算入提示符长度,造成命令换行的错误,终端
窗口的显示将会错乱。


titlebar


默认情况下,
PS1=\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

分析这一段代码,发现\[ 和 \]的“\e]0;\u@\h: \w\a”还是解释不了。其实"\e]0;" 与
"\a"之间的序列用于控制终端窗口titlebar的显示。还可以把0换成1或者2,分别控制任务
栏终端窗口titlebar显示和主窗口的titlebar显示,即:

\e]1;icon-title\a\e]2;main-title\a

参考资料


[1]Bash Shell PS1: 10 Examples to Make Your Linux Prompt like
Angelina Jolie

[2]Tip: Prompt magic
[3]http://tldp.org/HOWTO/Bash-Prompt-HOWTO/xterm-title-bar-manipulations.html
[4]tput 入门

没有评论:

发表评论