如何设置Bash提示符的颜色

时间:2020-01-09 10:44:56  来源:igfitidea点击:

大多数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时,例如,通过在终端上登录或者打开新的终端窗口,我们将看到自定义的提示。