第十三章 定制提示符
和Linux中的很多其他事物一样,提示符也具备很强的可配置性。
分解提示符
默认提示符:
[me@linuxbox ~]$
其中me是用户名,@linuxbox是主机名,~是当前工作目录。
提示符是由环境变量PS1(提示字符串1,prompt string 1的缩写)定义的。可以通过echo命令查看PS1的内容。
提示符中用到的转义字符
转义字符 | 显示内容 |
---|---|
a | ASCII响铃。会使计算机发出蜂鸣声 |
d | 当前日期(“星期几-月-日”格式)。例如Mon May 26 |
h | 本地服务器的主机名,不包括结尾域名(trailing domain name) |
H | 完整的主机名 |
j | 执行在当前Shell会话中的作业数量 |
l | 当前终端的名称 |
换行符 | |
回车符 | |
s | Shell程序的名称 |
24小时的当前时间(时:分:秒) | |
T | 12小时的当前时间 |
@ | 12小时制的当前时间(AM/PM) |
A | 24小时制的当前时间(时:分) |
u | 用户名 |
v | Shell版本号 |
V | Shell版本号和发布号 |
w | 当前工作目录 |
W | 当前工作目录的最后一部分 |
! | 当前命令的历史纪录编号 |
# | 当前Shell会话中输入的命令数量 |
$ | 显示$,如果拥有超级用户权限的话,则显示# |
[ | 表明一个或多个非输出字符序列的开头。可用于嵌入非输出的控制字符,以某种方式操作终端仿真器,例如移动光标或更改文本颜色 |
] | 表明一个或多个非输出字符序列的结束 |
换一种提示符
先保存当前提示符:
ps1_old="$PS1"
提示符设置为空:
#未设置前
me@linuxbox:~ $ PS1=
#设置后
PS1=
设置为最小化提示符:
#设置前
me@linuxbox:~ $ PS1="$ "
#设置后
$ PS1="$ "
在提示符中添加响铃:
#设置前
me@linuxbox:~ $ PS1="[a]$ "
#设置后
$ PS1="[a]$ #当按下Enter键后会嘀一声
在提示符中加入主机名和系统时间:
#设置前
me@linuxbox:~ $ PS1="A h $"
#设置后
21:11 linuxbox $ PS1="A h $"
类似于默认提示符的新提示符:
#设置前
me@linuxbox:~ $ PS1="<u@h W>$ "
#设置后
<me@linuxbox ~>$ PS1="<u@h W>$ "
增加颜色
字符颜色是由发送到终端仿真器的ANSI转义代码来控制的,转义代码可以嵌入要显示字符流中。转义代码不会输出到到屏幕上而是会被解释为一条命令。
[和]这两个转义字符用来封装非输出字符。ANSI转义代码八进制数033开头,后面是一个可选字符属性,接着是一条命令。
例如下面代码颜色设置为普通的黑色
33[0;30m
用于设置文本颜色的转义代码。颜色分为两组,区别在于是否应用了粗体bold属性(1),该属性使颜色分为深色和浅色。
设置文本颜色的转移代码:
转义代码 | 文本颜色 | 转移代码 | 文本颜色 |
---|---|---|---|
33[0;30m | 黑色 | 33[1;30m | 深灰色 |
33[0;31m | 红色 | 33[1;31m | 浅红色 |
33[0;32m | 绿色 | 33[1;32m | 浅绿色 |
33[0;33m | 棕色 | 33[1;33m | 黄色 |
33[0;34m | 蓝色 | 33[1;34m | 浅蓝色 |
33[0;35m | 紫色 | 33[1;35m | 浅紫色 |
33[0;36m | 青色 | 33[1;36m | 浅青色 |
33[0;37m | 浅灰色 | 33[1;37m | 白色 |
用于设置文本背景色的转义代码
序列 | 背景色 | 序列 | 背景色 |
---|---|---|---|
33[0;40m | 黑色 | 33[0;44m | 蓝色 |
33[0;41m | 红色 | 33[0;45m | 紫色 |
33[0;42m | 绿色 | 33[0;46m | 青色 |
33[0;43m | 棕色 | 33[0;47m | 浅灰色 |
注意 除了普通(0)和粗体(1)字符属性,还可以为文本设置下画线(4)、闪烁(5)及反显(7)。为了保持良好品质,许多终端仿真器禁止使用闪烁属性。
移动光标
转义代码也可以用来移动光标,通常用于在屏幕的不同位置显示时钟或其他种类的信息。
可用于移动光标的转移代码
转义代码 | 作用 |
---|---|
33[1;cH | 将光标移动至第一行c列 |
33[nA | 将光标向上移动n行 |
33[nB | 将光标向下移动n行 |
33[nC | 将光标向前移动n个字符 |
33[nD | 将光标向后移动n个字符 |
33[2J | 清空屏幕并将光标移动至左上角(0行,0列) |
33[K | 从光标所在处一直清除当前行末尾 |
33[s | 保存光标当前位置 |
33[u | 恢复先前保存的光标位置 |
PS1=”[33[s33[0;0H33[0;41m33[K33[1;33m 33[0m33[u]<u@h w>$ “
各部分转义代码的作用
转义代码 | 作用 |
---|---|
[ | 表示非空输出字符序列的开始。其目的在于使Bash能够正确计算字符串可输出的部分长度。否侧的话,命令行编辑特征无法正确定位光标 |
33[s | 保存光标位置。这是为了能在绘制完屏幕顶部的横条和时钟之后,使光标返回原处。注意有些终端不能识别此代码 |
33[0;0H | 将光标移动至屏幕左上角(0行,0列) |
33[0;41m | 将背景色设置为红色 |
33[K | 从光标当前所在处(屏幕左上角)一直清楚到行尾。因为背景色就是红色的所以清楚后的行就是红色的,从而创建红色横条。注意,清楚至行尾并不会改变光标位置,它仍停留在左上角 |
33[1;33m | 将文本设置为黄色 |
显示当前时间。 | |
33[0m | 关闭颜色,对文本和背景均有效 |
33[u | 恢复先前保存的光标位置 |
] | 结束非输出字符序列 |
<u@h w>$ | 提示符 |
保存提示符
若想永久存储提示符,将其添加到.bashr文件中是一个一劳永逸的解决办法。为此把下列两行加入该文件中:
PS1=”[33[s33[0;0H33[0;41m33[K33[1;33m 33[0m33[u]<u@h w>$ “
export PS1
暂无评论内容