GUN/Bash 系列(七)提示符(Prompting)

在使用交互式 Bash 时,一个配置得当的命令提示符可以为用户带来不少便利,本文讲解如何配置命令提示符。

默认提示符

命令提示符涉及到以下两个环境变量:

环境变量 描述
PS1 主提示符,Bash 会在准备好读入一条命令时显示,默认值 \s-\v\$
PS2 次提示符,Bash 会在需要更多的输入来完成一条命令时显示,默认值 >

定制提示符

Bash 允许通过插入一些反斜杠转义的特殊字符来定制这些提示符,常用的转义字符如下:

转义字符 描述
\h 主机名,第一个 . 之前的部分
\H 主机名
\j shell 当前管理的作业数量
\l shell 的终端设备名的基本部分
\n 新行符
\r 回车
\s shell 的名称, $0 的基本部分 (最后一个斜杠后面的部分)
\u 当前用户的用户名
\v bash 的版本 (例如,4.3)
\w 当前工作目录
\W 当前工作目录的基本部分
\! 此命令的历史编号
\# 此命令的命令编号
\$ 如果有效 UID 为 0,则显示 #, 否则 $
\\ 一个反斜杠

除此之外,还有一些不太常用的日期转义字符:

转义字符 描述
\d 当前日期,格式是 “星期 月份 日” (例如,”Tue May 26”)
\D{format} 自定义日期格式,花括号是必需的
\t 当前时间,采用 24 小时制的 HH:MM:SS 格式
\T 当前时间,采用 12 小时制的 HH:MM:SS 格式
\@ 当前时间,采用 12 小时制上午/下午 am/pm 格式
\A 当前时间,采用 24 小时制上午/下午格式

如何定制

由于 PS1 默认设置的 \s-\v\$ 实在是太废毫无信息量可言,显示如下:

1
bash-4.3$

因此可以通过修改 ~/.bash_profile 文件来定制自己的命令提示符。例如,使用 CentOS 默认设置的 [\u@\h \W]\$

1
2
3
$ vim ~/.bash_profile

export PS1="[\u@\h \w]\$ "

定制后,能够知道当前用户、主机名、工作目录:

1
[root@BGP-BJ-C-5HL ~]$

参考

http://www.gnu.org/software/bash/manual/bashref.html#Controlling-the-Prompt

自定义shell终端提示符(例如颜色)