第十一部分(自定制 shell 提示符)

2020-04-09

解剖一个提示符

我们默认的提示符看起来像这样:

[me@linuxbox ~]$

注意它包含我们的用户名,主机名和当前工作目录,但是它又是怎样得到这些东西的呢?结果证明非常简单。提示符是由一个环境变量定义的,叫做 PS1(是“prompt string one”的简写)。我们可以通过 echo 命令来查看 PS1 的内容。

[root@VM_0_7_centos ~]# echo $PS1
[\u@\h \W]\$

从输出结果中,我们看到那个 PS1 环境变量包含一些这样的字符,比方说中括号[@ 符号,和$美元符号,但是剩余部分就是个谜。我们中一些机敏的人会把这些看作是由反斜杠转义的特殊字符。这里是一部分字符列表,在提示符中 shell 会特殊对待这些字符:
shell提示符中用到的转义字符

试试一些可替代的提示符设计

参照这个特殊字符列表,我们可以更改提示符来看一下效果。首先,我们把原来提示符字符串的内容备份一下,以备之后恢复原貌。为了完成备份,我们把已有的字符串复制到另一个 shell变量中,这个变量是我们自己创造的。

[root@VM_0_7_centos ~]# ps1_old="$PS1"
[root@VM_0_7_centos ~]# echo $ps1_old
[\u@\h \W]\$

我们新创建了一个叫做 ps1_old 的变量,并把变量 PS1 的值赋 ps1_old。通过 echo 命令可以证明我们的确复制了 PS1 的值。

在终端会话中,我们能在任一时间复原提示符,只要简单地反向操作就可以了。

PS1="$ps1_old"

现在,我们准备开始,让我们看看如果有一个空的字符串会发生什么:

PS1=

如果我们没有给提示字符串赋值,那么我们什么也得不到。根本没有提示字符串!提示符仍然在那里,但是什么也不显示,正如我们所要求的那样。我们将用一个最小的提示符来代替它:

PS1="\$ "

这样要好一些。至少能看到我们在做什么。注意双引号中末尾的空格。当提示符显示的时候,这个空格把美元符号和光标分离开。

添加颜色

字符颜色是由发送到终端仿真器的一个嵌入到了要显示的字符流中的 ANSI 转义编码来控制的。这个控制编码不会“打印”到屏幕上,而是被终端解释为一个指令。

[] 序列被用来封装这些非打印字符。一个 ANSI 转义编码以一个八进
033(这个编码是由退出按键产生的)开头,其后跟着一个可选的字符属性,在之后是一个指令。

这里是一个可用的文本颜色列表。注意这些颜色被分为两组,由应用程序粗体字符属性(1)分化开来,这个属性可以描绘出“浅”色文本。
用转义序列来设置文本颜色

也有可能要设置文本的背景颜色,使用下面列出的转义编码。这个背景颜色不支持黑体属性。
用转义序列来设置背景颜色

注意:除了正常的 (0) 和黑体 (1) 字符属性之外,文本也可以具有下划线 (4),闪烁 (5),和反向 (7) 属性。为了拥有好品味,然而,许多终端仿真器拒绝使用这个闪烁属性。

移动光标

转义编码也可以用来定位光标。这些编码被普遍地用来,每次当提示符出现的时候,会在屏幕的不同位置比如说上面一个角落,显示一个时钟或者其它一些信息。这里是一系列用来定位光标的转义编码:

光标移动转义序列
使用上面的编码,我们将构建一个提示符,每次当这个提示符出现的时候,会在屏幕的上方画出一个包含时钟(由黄色文本渲染)的红色长条。构建好的提示符的编码就是这串看起来令人敬畏的字符串:

PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]
<\u@\h \W>\$ '

让我们分别看一下这个字符串的每一部分所表示的意思:

保存提示符

显然地,我们不想总是敲入那个怪物,所以我们将要把这个提示符存储在某个地方。通过把它添加到我们的.bashrc 文件,可以使这个提示符永久存在。为了达到目的,把下面这两行添加到.bashrc 文件中。

PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ '
export PS1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值