用过终端的朋友肯定对默认的提示符 localhost:~ Meniny$ 或者 [[email protected] ~]$ 很熟悉,现在我们来了解一下如果修改这个提示符的内容,以 bash 为例。

自定义命令提示符内容

在 UNIX/Linux 系统中,有一个变量叫做 PS1,我们要修改的内容就是它,首先来看一下它默认的内容,以 OS X 为例:

localhost:~ Meniny$ echo $PS1
\h:\W \u\$

你可以看到 PS1 中有很多转义符号,下面我们来了解一下 FC4 环境下这些转义符号所代表的意义:

\d日期,格式为年 月 日
\H完整主机名
\h缩写主机名
\t时间,24小时制,格式为HH:MM:SS
\T时间,12小时制
\A时间,24小时制,格式为HH:MM
\u当前用户名
\vbash版本
\w工作目录,Home目录用~代替
\W利用basename取得工作目录,只列出最后一个目录
\#命令编号
\$提示字符,用户为root时显示#,普通用户则显示$

如上表,我们只需要使用自己需要的转义字符赋值给 PS1 即可,例如:

localhost:~ Meniny$ PS1='\t \h:\W \u\$ '
18:00:00 localhost:~ Meniny$

自定义命令提示符颜色

你一定和我一样,无法满足于仅仅命令提示符的内容,那么接下来我们再来修改它的颜色,这一操作与前面的类似,仍需要修改 PS变量,配置颜色的格式为:

\[\e[F;Bm\]变色部分\[\e[m\]

其中 F 的前景色,取值为 30 ~ 37;B 为背景色,取值为 40 ~ 47。

FB颜色
3040黑色
3141红色
3242绿色
3343黄色
3444蓝色
3545紫色
3646青色
3747白色

此外还可以定义一些特殊显示样式:

0默认样式
1高亮
4下划线
5闪烁
7反白
8不可见

例如要关闭颜色输出,可通过使用 \e[0m\]变色部分\[\e[m\] 实现。

好了,举个栗子,将 localhost:~ Meniny$ 中的 localhost 部分变为绿色,~ 部分变为粉色,Meniny 部分变为黄色,:$ 部分保持默认颜色:

localhost:~ Meniny$ PS1='\[\e[1;32m\]\h:\W\[\e[m\] \[\e[1;33m\]\u\[\e[m\]\[\e[0m\]$ \[\e[m\]'
localhost:~ Meniny$

保存配置

前面两部分的修改内容,都只是暂时性的,如果你想要让他们永久生效,就需要将它们定义到文件中,仅以 OS X 为例:

vi ~/.bash_profile

i 进入编辑模式,输入前面的指令(包括颜色与显示内容),例如:

PS1='\[\e[1;32m\]\h:\W\[\e[m\] \[\e[1;33m\]\u\[\e[m\]\[\e[0m\]$ \[\e[m\]'

如果你希望在开启子 shell 后仍然显示同样的效果,那么额外添加 export 关键字,也即:

export PS1='\[\e[1;32m\]\h:\W\[\e[m\] \[\e[1;33m\]\u\[\e[m\]\[\e[0m\]$ \[\e[m\]'

输入 :wq 回车以保存并退出编辑器:

source ~/.bash_profile