如何设置Bash提示符的颜色
大多数Linux发行版都将Bash提示符配置为类似于username @ hostname:directory $
。但是我们可以将Bash提示符配置为包含所需的内容,甚至可以选择所需的颜色。
此处的示例步骤是在Ubuntu 16.04 LTS上执行的。在其他Linux发行版上,该过程应相同,尽管.bashrc文件中的默认Bash提示和设置可能有所不同。
提示变量的存储位置
Bash提示配置存储在用户帐户的.bashrc文件中,该文件位于~/ .bashrc中。因此,如果用户名是bob,则文件位于/ home / bob / .bashrc
。
我们可以打开文件以查看当前的Bash变量。我们将使用nano作为示例文本编辑器,尽管我们也可以使用vi,emacs或者其他我们喜欢的文本编辑器。打开终端并运行:
nano ~/.bashrc
向下滚动到" PS1 ="部分。第一个变量看起来相当复杂,因为它包含颜色信息,我们将在后面解释。没有颜色信息的第二个变量的内容如下:
${debian_chroot:+($debian_chroot)}\u@\h:\w$
由于$ {debian_chroot:+($ debian_chroot)}位,这仍然有点复杂。这些只是告诉Bash让我们知道我们使用的是Debian chroot环境,通常不会显示出来。忽略这些,这是Bash提示变量的默认结构:
\u@\h:\w$
\ u表示用户名,@表示@号,\ h表示主机名(计算机名),:
表示:字符,\ w表示工作目录,\ $如果我们是普通用户帐户或者root用户,则表示$。综上所述,我们将得到" username @ hostname:working_directory $"。
要更改Bash提示符,我们只需要添加,删除或者重新排列PS1变量中的特殊字符,但是可以使用的变量比默认变量多得多。
离开文本编辑器进入nano,按Ctrl + X退出。我们将向我们展示如何在实际将新变量写入.bashrc文件之前尝试使用变量。
如何创建自定义Bash提示
Bash提示配置存储在PS1变量中。要将PS1变量的内容保存到新变量中,请运行以下命令:
DEFAULT=$PS1
我们现在可以将PS1变量设置为不同的值以进行实验。例如,这里的第一行将提示设置为基本用户$提示,而第二行将提示设置为基本用户:working_directory $提示。
PS1="\u$ " PS1="\u:\w$ "
如果我们想返回到默认提示,只需运行以下命令。
PS1=$DEFAULT
由于我们之前保存了这些默认设置,因此Bash将恢复为默认提示。请注意,我们在此处所做的任何更改仅是当前Bash会话的临时更改,因此我们始终可以注销并重新登录,或者关闭然后重新打开终端窗口以返回默认提示。但是上面的一行使我们可以轻松地返回到默认的Bash提示符,而不必退出或者关闭窗口。
我们可以将任何字符或者文本添加到变量。因此,要在默认提示前加上Hello World,可以使用:
PS1="Hello World \u@\h:\w$ "
现在我们已经掌握了基础知识,我们只需要知道所有特殊字符是什么。我们可能不会在乎其中许多,但是这里是Bash手册中显示的完整列表:
响铃字符:\ a
日期,以工作日月份日期格式(例如,星期二5月26日):
\ d
格式被传递给strftime(3),结果被插入到提示字符串中。空格式将导致特定于语言环境的时间表示。大括号是必需的:\ D {format}
转义字符:\ e
主机名,最多第一个。:
\ h
主机名:\ H
Shell当前管理的作业数:
\ j
Shell终端设备名称的基本名称:\ l
换行符:\ n
回车:\ r
shell程序的名称,$ 0的基本名称(最后斜杠后的部分):
\ s
时间,以24小时制HH:MM:SS格式:
\ t
时间,以12小时制HH:MM:SS格式:`\ T
时间,采用12小时制,例如:\
时间,以24小时制HH:MM格式:
\ A
当前用户的用户名:\ u
Bash的版本(例如2.00):
\ v
Bash版本+补丁程序级别(例如2.00.0):
\ V
当前工作目录,$ HOME缩写为波浪号(使用$ PROMPT_DIRTRIM变量):
\ w
$ PWD的基本名称,其中$ HOME缩写为波浪号:
\ W
该命令的历史编号:
\!
该命令的命令编号:
\#
如果有效uid为0,则为#,否则为$:
\ $
ASCII码为八进制值nnn的字符:
\ nnn
反斜杠:" \"
开始一系列非打印字符。这可以用于将终端控制序列嵌入到提示中:
\ [
结束一系列非打印字符:" ]"
因此,如果要在Bash提示符中添加日期和时间,并将工作目录放在第二行的命令中,则可以使用以下结构:
PS1="[\d \t] \u@\h\n\w$ "
这里的方括号根本不是必需的,但有助于视觉上分解内容并使该行更易于阅读。如前所述,我们可以在所需的变量中添加任何文本或者普通字符,因此请随意使用适合方法。
我们应该了解一个更强大的技巧:我们可以将任何命令的输出添加到提示中。每当出现提示时,Bash都会运行命令并填写当前信息。为此,只需包含要在两个```字符之间运行的任何命令。那不是撇号,而是重音符号,它出现在键盘上的Tab键上方。
例如,假设我们要在提示符下查看Linux内核版本。我们可以使用如下所示的行:
PS1="\u@\h on `uname -s -r` \w$ "
再举一个例子,假设我们要查看系统的正常运行时间和平均负载,如uptime命令所显示。我们可以使用以下结构,将正常运行时间放在提示符其余部分之前的行中。
PS1="(`uptime`)\n\u@\h:\w$ "
随意尝试使用不同的特殊字符和命令来组装理想的命令提示符。
如何为Bash提示添加颜色
确定首选提示后,即可为其添加颜色。这实际上非常简单,但是如果我们不了解所要查看的内容,则会使变量看起来非常混乱和复杂。
例如,先前的默认颜色提示变量为:
${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]$
或者,再次删除debian_chroot位:
\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w\[3[00m\]$
实际上,这只是前面的\ u @ \ h:\ w $
变量,但是带有颜色信息。确实,我们可以将其细分为以下几部分:
\[3[01;32m\]\u@\h \[3[00m\]: \[3[01;34m\]\w \[3[00m\]$
第一部分是" \ u @ \ h"位,其后是将其变为绿色的颜色信息。第二个是:
字符,其后是删除所有颜色的颜色信息。第三个是" \ w"位,其前面是将其变为蓝色的颜色信息。第四个是\ $
位,其后是删除所有颜色的颜色信息。
一旦了解了如何构造自己的颜色标签,就可以在Bash提示的任何部分添加所需的任何颜色。
这是我们需要了解的内容:我们必须在\和\字符之间包括整个颜色代码信息。在标签内,我们必须以\ 033 [
或者\ e [
开头,以向Bash指示这是颜色信息。 \ 033 [和
\ e [都做同样的事情。 \ e [
较短,因此可能更方便使用,但是我们在这里使用\ 033 [
,因为它与默认使用的匹配。在标签的末尾,我们必须以" m "结尾以指示颜色标签的末尾。
分解一下,这就是每个颜色标签的外观。唯一的区别是我们添加的信息代替了COLOR来定义实际的颜色:
\[3[COLORm\]
Bash允许我们更改前景文本的颜色,向文本添加诸如粗体或者下划线的属性,并设置背景颜色。
这是前景文本的值:
黑色:30
蓝色:34
青色:36
绿色:32
紫色:35
红色:31
白色:37
黄色:33
例如,由于紫色文本的颜色代码为32,因此对紫色文本使用\\ [\ 033 [32m ]]。
我们还可以为文本指定属性。必须在颜色编号之前添加此属性,并用分号(;)分隔。具有这些属性的文本在不同的终端仿真器中看起来会有所不同。
这是文本属性的值:
普通文字:0
粗体或者浅色文本:1(取决于终端仿真器。)
昏暗的文字:2
带下划线的文字:4
闪烁文本:5(在大多数终端仿真器中不起作用。)
反转文本:7(这会反转前景色和背景色,因此,如果当前文本是黑色背景上的白色文本,则会在白色背景上看到黑色文本。)
隐藏文字:8
我们实际上不需要包括普通的text属性。无论如何,这是默认设置。
例如,由于红色文本为代码31,粗体文本为代码1,因此我们将对粗体文本使用" \ [\ 033 [1; 31m ]"。
我们也可以指定背景色,但不能向背景色添加属性。
以下是背景色的值:
黑色背景:40
蓝色背景:44
青色背景:46
绿色背景:42
紫色背景:45
红色背景:41
白色背景:47
黄色背景:43
例如,由于蓝色背景为代码44,\\\ [033033 \ 44m ]将指定一个蓝色背景。
我们可以同时指定前景色和背景色标签。例如,42代表绿色背景,31代表红色文本。因此,要使默认提示在绿色背景上变为红色文本,可以使用:
PS1="\[3[42m\]\[3[31m\]\u@\h:\w$ "
我们仅在此处指定一种背景颜色,然后指定一种前景文本颜色,该颜色从提示的开头开始,并应用于提示中的所有文本。但是,我们可以在变量中指定任意数量的颜色标签,以根据需要为提示符的不同部分着色。
除非我们指定颜色代码00clear颜色信息,否则背景和前景文本的颜色会一直超出提示。我们还可以在变量中使用此标记,以将格式重置为提示中的默认位置。例如,以下行将结束所有\ $字符之前的着色。
PS1="\[3[42m\]\[3[31m\]\u@\h:\w\[3[00m\]$ "
如何设置新默认提示
完成颜色实验后,我们应该在当前会话中拥有一个喜欢的Bash提示。但是我们可能希望使该新提示永久保留,以便在所有Bash会话中自动使用。
为此,我们只需要更改.bashrc文件中的PS1变量的内容即可,我们之前已经看过它。
在我们喜欢的文本编辑器中打开.bashrc文件,如下所示:
nano ~/.bashrc
向下滚动并找到PS1 =部分。只需将默认变量替换为自定义变量即可。我们可能想单独保留$ {debian_chroot:+($ debian_chroot)}
位,但是除非我们处于chroot环境中,否则它们不会出现。
在if ["" $ color_prompt" = yes]下输入彩色的PS1变量;然后
行。在" else"行下输入无颜色的变量。
保存文件并关闭文本编辑器。例如,要将文件保存为nano,请按Ctrl + O,按Enter,然后按Ctrl + X退出。
下次启动新的Bash shell时,例如,通过在终端上登录或者打开新的终端窗口,我们将看到自定义的提示。