12-1 定制提示符

时间:2022-07-23
本文章向大家介绍12-1 定制提示符,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本章将会讲解一个看似微不足道的细节:shell 提示符。通过学习 shell提示符,我们会发现 shell 和 终端仿真器程序的内部工作机制。 和Linux中的很多程序一样,shell 提示符的可配置性很高。 尽管大多数用户并不重视提示符,但是一旦我们学会了怎样控制它,它就会成为一种相当有用的设备。(准)

一、提示符的分解

1.提示符的构成

系统的默认 shell 提示符看起来如下:

shell提示符.png

可以看到 shell 提示符中包含了用户名、主机名 和 当前的工作目录,但是为什么 shell 提示符是这样子的呢? 很简单,提示符就是这样定义的。

(1)环境变量PS1(为什么?)

提示符是由名为PS1的环境变量定义的(PS1:是prompt string 1的缩写,即提示符字符串1)。

① 查看PS1

echo 命令可以帮助用户看到 PS1 的值。

echo $PS1

echo查看环境变量PS1的值.png

可以看出,PS1 包含了一些提示符中出现的符号,比如:方( [] )括号,@ 符号和美元($)符号,但是其余的部分则很令人困惑。 这就需要将这些符号与下表中所示的 由反斜杠转义 的特殊字符联系起来。

Ⅰ.注意

如果你的输出结果和上图范例有所不同,不要担心。 因为每一个 Linux 发行版本对此提示符字符串的定义都会有所不同,有一些甚至定义得很奇怪。

② shell提示符中使用的转义字符(准)

转义字符

含义

a

ASCⅡ 铃声。在遇到此转义字符时,计算机发出哔哔声。

d

当前日期,以星期、月、日的形式表示。如:Sun August 9(星期六 8月9日)。

h

本地机器的主机名,但不带域名。(简单说,不带域名的主机名)

H

完整的主机名。

j

当前 shell 会话中进行的任务个数。

l

当前终端设备的名称。

n

换行符。

r

回车符。

s

shell 程序的名称。

t

当前时间(24小时制),格式:小时: 分钟: 秒

T

当前时间(12小时制)。

@

当前时间(12小时制),格式: AM/PM

A

当前时间(24小时制),格式:小时:分钟

u

当前用户的用户名。

v

shell 的版本号。

V

shell 的版本号和发行号。

w

当前工作目录名。

W

当前工作目录名的最后一部分。

! (注意:这个及以下字符间都没有空格,不加空格两字符都无法显示)

当前命令的历史编号。

#

当前 shell 会话中输入的命令数。

$

在非管理员权限下输出“ $ ”。在管理员权限下输出“ # ”。

[

标志一个或多个非打印字符序列的开始。用于嵌入非打印的控制字符,使其以一定方式操纵终端仿真器,比如移动光标 或 更改文本颜色。

]

标志着非显示字符序列的结束。

二、尝试设计提示符

通过上面这个特殊字符列表,我们可以更改提示符来查看效果。

1.先备份

在尝试设计前,我们首先备份现有的字符串,以便过后进行恢复。为此,将现有的字符串复制到我们创建的另外一个shell变量中,

ps1_old="$PS1"

这样我们就创建了名为 ps1_old 的新变量,并将 PS1 的值赋给了 ps1_old。 现在就可以使用 echo 命令来验证 PS1 的值确实已经被复制了。

echo $ps1_old

(1)复原

在终端会话中,用户随时可以通过以下这个过程的逆操作来复原最初的提示符

PS1="$ps1_old"

在这里不用 ps1_old 进行设计的原因是:PS1 在系统中已经是环境变量,而 ps1_old 还不是系统变量,若是对 ps1_old 进行操作,还得将其先加入到环境变量中。

2.设计(怎么做?)

(1)提示符为空

现在一切,让我们看看,如果提示符为空会发生什么。

PS1=

提示符为空,那么用户不会得到任何提示。因为根本就没有提示字符串。 尽管提示符就在那里,但是系统并不会显示,这样的提示符看起来很不得劲,所以现在将提示符设置为最简略的内容。

PS1="$"

这样就好多了,至少现在用户知道自己在做什么了,可以注意到双引号中末尾的空格。 当显示提示符时,这空格会把美元符号和光标分隔开

(2)添加铃声

在提示符中添加一个铃声,这样一来,每当系统显示提示符的时候,用户都会听到哔哔声

PS1="a$ "

虽然听多了可能会让我们感到厌烦,但是在一些情况下可能会很有帮助,比如可以在一个耗时特别长的命令执行完毕时通知用户

(3)添加主机名、当天时间

接下来,试着创建一个信息更为丰富的提示符,比如说一个包括主机名和当天的时间信息的提示符

PS1="A h $ "
① 小技巧

如果我们需要记录某些任务的执行时间,在提示符中添加时间信息会比较有用

(4)定制最初样式的提示符

PS1="<u@h W>$ "

这时你就会发现,此时的提示符变成了 <当前用户的用户名@不带域名的主机名 当前工作目录的最后一部分>$空格。 这和最初样式的提示符类似。

也可用上表中的其它序列,自由组合,看看能创造出一个怎样的提示符。