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>$ "
这时你就会发现,此时的提示符变成了 <当前用户的用户名@不带域名的主机名 当前工作目录的最后一部分>$空格。 这和最初样式的提示符类似。
也可用上表中的其它序列,自由组合,看看能创造出一个怎样的提示符。
- MyCat安装与测试教程 超详细!
- 关于如何来构造一个String类
- Java集合深度解析之LinkedList
- 2015编程之美(资格赛)--基站选址
- CentOS7下Nginx服务器安装与使用教程
- 2015年编程之美(资格赛) ---2月29日
- 编程之美--2. Trie树 (Trie图)
- 编程之美 --1 : 骨牌覆盖问题·一
- go语言中的数组切片:特立独行的可变数组
- go语言单例模式(Singleton)实例分析
- C++ template的一些高级用法(元编码,可变参数,仿函数,using使用方法,. C++ 智能指针)
- Golang memory model
- go的非侵入式接口
- C++ 如何重复利用一个内存地址块
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP封装的分页类与简单用法示例
- ThinkPHP3.2框架自带分页功能实现方法示例
- PHP获取访问设备信息的方法示例
- PHP实现微信提现功能
- PHP实现微信退款功能
- PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
- PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
- 实现php删除链表中重复的结点
- Yii2.0框架实现带分页的多条件搜索功能示例
- 定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
- PHP APP微信提现接口代码
- thinkPHP5.1框架路由::get、post请求简单用法示例
- Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
- Python爬虫实例——scrapy框架爬取拉勾网招聘信息
- php实现微信企业转账功能