在 Linux 终端中自定义 Bash 配色和提示内容
| 2017-01-09 14:05 评论: 3 收藏: 6
现今,大多数(如果不是全部的话)现代 Linux 发行版的默认 shell 都是 Bash。然而,你可能已经注意到这样一个现象,在各个发行版中,其终端配色和提示内容都各不相同。
如果你一直都在考虑,或者只是一时好奇,如何定制可以使 Bash 更好用。不管怎样,请继续读下去 —— 本文将告诉你怎么做。
PS1 Bash 环境变量
命令提示符和终端外观是通过一个叫 PS1
的变量来进行管理的。根据 Bash 手册页说明,PS1 代表了 shell 准备好读取命令时显示的主体的提示字符串。
PS1 所允许的内容包括一些反斜杠转义的特殊字符,可以查看手册页中 PRMPTING 部分的内容来了解它们的含义。
为了演示,让我们先来显示下我们系统中 PS1
的当前内容吧(这或许看上去和你们的有那么点不同):
$ echo $PS1
[\u@\h \W]\$
现在,让我们来了解一下怎样自定义 PS1 吧,以满足我们各自的需求。
自定义 PS1 格式
根据手册页 PROMPTING 章节的描述,下面对各个特殊字符的含义作如下说明:
\u:
显示当前用户的 用户名。\h:
完全限定域名 (FQDN)中第一个点(.
)之前的主机名。\W:
当前工作目录的基本名,如果是位于$HOME
(家目录)通常使用波浪符号简化表示(~
)。\$:
如果当前用户是 root,显示为#
,否则为$
。
例如,如果我们想要显示当前命令的历史数量,可以考虑添加 \!
;如果我们想要显示 FQDN 全称而不是短服务器名,那么可以考虑添加 \H
。
在下面的例子中,我们同时将这两个特殊字符引入我们当前的环境中,命令如下:
PS1="[\u@\H \W \!]\$"
当按下回车键后,你将会看到提示内容会变成下面这样。可以对比执行命令修改前和修改后的提示内容:
自定义 Linux 终端提示符 PS1
现在,让我们再深入一点,修改命令提示符中的用户名和主机名 —— 同时修改文本和环境背景。
实际上,我们可以对提示符进行 3 个方面的自定义:
文本格式 | 前景色(文本) | 背景色 |
---|---|---|
0: 常规文本 | 30: 黑色 | 40: 黑色 |
1: 加粗文本 | 31: 红色 | 41: 红色 |
4: 下划线文本 | 32: 绿色 | 42: 绿色 |
33: 黄色 | 43: 黄色 | |
34: 蓝色 | 44: 蓝色 | |
35: 紫色 | 45: 紫色 | |
36: 青色 | 46: 青色 | |
37: 白色 | 47: 白色 |
我们将在开头使用 \e
特殊字符,跟着颜色序列,在结尾使用 m
来表示结束。
在该序列中,三个值(背景,格式和前景)由分号分隔(如果不赋值,则假定为默认值)。
建议阅读: 在 Linux 中学习 Bash shell 脚本。
此外,由于值的范围不同,指定背景,格式,或者前景的先后顺序没有关系。
例如,下面的 PS1
将导致提示符为黄色带下划线文本,并且背景为红色:
PS1="\e[41;4;33m[\u@\h \W]$ "
修改 Linux 终端提示符配色 PS1
虽然它看起来那么漂亮,但是这个自定义将只会持续到当前用户会话结束。如果你关闭终端,或者退出本次会话,所有修改都会丢失。
为了让修改永久生效,你必须将下面这行添加到 ~/.bashrc
或者 ~/.bash_profile
,这取决于你的版本。
PS1="\e[41;4;33m[\u@\h \W]$ "
尽情去玩耍吧,你可以尝试任何色彩,直到找出最适合你的。
(LCTT 译注:原文的这种设置,不但会影响到提示符,也会影响到输入和显示的其它文字,因此应该在 PS1 设置中使用 \e[0m
来结束颜色设置。如:PS1="\e[41;4;33m[\u@\h \W]$\e[0m "
)
小结
在本文中,我们讲述了如何来自定义 Bash 提示符的配色和提示内容。如果你对本文还有什么问题或者建议,请在下面评论框中写下来吧。我们期待你们的声音。
作者简介:
Aaron Kili 是一位 Linux 及 F.O.S.S 的狂热爱好者,一位未来的 Linux 系统管理员,web 开发者,而当前是 TechMint 的原创作者,他热爱计算机工作,并且信奉知识分享。
via: http://www.tecmint.com/customize-bash-colors-terminal-prompt-linux/
作者:Aaron Kili 译者:GOLinux 校对:jasminepeng
- [1]来自内蒙古的 Chrome 54.0|Windows 7 用户 发表于 2017-01-10 00:31 的评论:我是在 ~./.bashrc 中这样的写的: PS1="\e[;1;31m[\u@\h \W]$\e[0m ",写完后发现 CTRL + u 不好用了,前面总是留一段,清除不干净了,不知道是为什么?
- 来自四川成都的 Chrome 55.0|GNU/Linux 用户 2017-01-10 07:42 8 赞 回复
- 0m 双引号之间有个空格。不过留个空格挺好。
- [1]来自内蒙古的 Chrome 54.0|Windows 7 用户 发表于 2017-01-10 00:31 的评论:我是在 ~./.bashrc 中这样的写的: PS1="\e[;1;31m[\u@\h \W]$\e[0m ",写完后发现 CTRL + u 不好用了,前面总是留一段,清除不干净了,不知道是为什么?
- 来自内蒙古的 Chrome 54.0|Windows 7 用户 2017-01-10 00:33 8 赞 回复
- sorry,更正一个错误:~/.bashrc