程序员初见Linux

12-1 定制提示符

2020-08-09  本文已影响0人  見贤思齊_

本章将会讲解一个看似微不足道的细节: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>\$ "

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

这和最初样式的提示符类似。

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

上一篇 下一篇

猜你喜欢

热点阅读