`
venus585625
  • 浏览: 248748 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

改变linux终端颜色 和 终端提示符

 
阅读更多
如果您很容易使 shell 提示行变得色彩绚烂斓且带有更多信息,为什么还要坚持用单调的标准 shell 提示行呢?在这篇技巧中,Daniel Robbins 将说明如何获得符合您的意愿的 shell 提示行,并会说明如何动态更新 X 终端的标题栏。

作为 Linux/UNIX 人,我们有很长的时间是在 shell 中工作,并且在许多情况下,下面这一行就是始终盯着我们的那个提示行:

bash-2.04$ 


如果您恰巧是超级用户 (root),您就有权使用下面这个美丽的标示“身份”的提示行版本:   

bash-2.04$ 


这些提示行并不是十分漂亮。这也就难怪几种 Linux 版本对默认提示行进行了升级,在其中增加了颜色和更多的信息。但是,即便您恰好有一个本身带有很好的彩色提示行的新式版本,它也不可能是完美无缺的。您或许希望在提示行中增加或更改几种颜色,或者增加(或删除)一些信息。从头开始设计属于您自己的彩色的、经过装饰的提示行并不难。

提示行基础:修改提示符显示

在 bash 下,可以通过更改 PS1 环境变量的值来设置提示行,如下所示:
$ export PS1=">; " 
>; 




更改会立即生效,通过将 "export" 定义放在您的 ~/.bashrc 文件中可将这种更改固定下来。只要您愿意,PS1 可以包含任意数量的纯文本:
$ export PS1="This is my super prompt >; " 
This is my super prompt >; 




尽管这很有趣,但在提示行中包含大量静态文本并不是特别有用。大多数定制的提示行包含诸如用户名、工作目录或主机名之类的信息。这些花絮信息可以帮助您在 shell 世界中遨游。例如,下面的提示行将显示您的用户名和主机名:

$ export PS1="\u@\H >; " 
drobbins@freebox >; 




这个提示行对于那些以多个不同名称的帐户登录多台机器的人尤为有用,因为它可以提醒您:您目前在哪台机器上操作,拥有什么权限。

在上面的示例中,我们使用了专用的用反斜杠转义的字符序列,藉此通知 bash 将用户名和主机名插入提示行中,当这些转义字符序列出现在 PS1 变量中时,bash 就会用特定的值替换它们。我们使用了序列 "\u"(表示用户名)和 "\H"(表示主机名的第一部分)。下面是 bash 可识别的全部专用序列的完整列表(您可以在 bash man page 的 "PROMPTING" 部分找到这个列表):

序列 说明
\a ASCII 响铃字符(也可以键入 \007) 
\d "Wed Sep 06" 格式的日期            
\e ASCII 转义字符(也可以键入 \033) 
\h 主机名的第一部分(如 "mybox") 
\H 主机的全称(如 "mybox.mydomain.com") 
\j 在此 shell 中通过按 ^Z 挂起的进程数 
\l 此 shell 的终端设备名(如 "ttyp4") 
\n 换行符 
\r 回车符 
\s shell 的名称(如 "bash") 
\t 24 小时制时间(如 "23:01:01") 
\T 12 小时制时间(如 "11:01:01") 
\@ 带有 am/pm 的 12 小时制时间 
\u 当前用户名 
\v bash 的版本(如 2.04) 
\V Bash 版本(包括补丁级别) ?/td>; 
\w 当前工作目录(如 "/home/drobbins/tools") 
\W 当前工作目录的“基名 (basename)”(如 "tools") 
\! 当前命令在历史缓冲区中的位置 
\# 命令编号(只要您键入内容,它就会在每次提示时累加) 
\$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#" 
\xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "\007")表示的 ASCII 字符 
\\ 反斜杠 
\[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。 
\] 这个序列应该出现在非打印字符序列之后。 




这样,您已经知道了 bash 中用反斜杠转义的全部专用序列。请稍微演练一下这些序列,以对它们的工作方式获得一些感性认识。在您做了一些测试之后,

下面开始添加颜色。


彩色化

添加颜色相当容易;第一步是设计不带颜色的提示行。然后,我们所要做的只是添加终端(而不是 bash)可识别的专用转义序列,以使它以彩色显示文本的某些部分。标准 Linux 终端和 X 终端允许您设置前景(文字)颜色和背景颜色,如果需要,还可以启用 "bold" 字符。有八种颜色可供我们选择。

颜色是通过在 PS1 中添加专用序列来选择的 -- 基本上是夹在 "\e["(转义开方括号)和 "m" 之间数字值。如果指定一个以上的数字代码,则用分号将它们分开。

下面是一个颜色代码示例:

"\e[0m" 




如果将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。您可能会在提示行结束时使用这个代码,以使您键入的文字成为非彩色的。现在,让我们看一下这些颜色代码。请注意下面的抓屏结果:



颜色表

前景             背景              颜色
   ---------------------------------------
   30                40               黑色
   31                41               紅色
   32                42               綠色
   33                43               黃色
   34                44               藍色
   35                45               紫紅色
   36                46               青藍色
   37                47               白色







代码              意义
   -------------------------
   0                 OFF
   1                 高亮显示
   4                 underline
   5                 闪烁
   7                 反白显示
   8                 不可见



要使用这个表,首先请查找您要使用的颜色,然后查找对应的前景编号 (30-37) 和背景编号 (40-47)。例如,如果您喜欢黑底绿字,则可将编号分别设为 32 和 40。然后打开您的提示行定义并在其中添加适当的颜色代码。下面的定义:

export PS1="\w>; "

变为:

export PS1="\e[32;40m\w>; "

到现在为止,提示行尽管已经很不错了,但仍不太完美。在 bash 显示出工作目录以后,我们需要使用 "\e[0m" 序列将颜色重新设置为正常值。

export PS1="\e[32;40m\w>; \e[0m"



这个定义将显示一个漂亮的绿色提示行,但我们仍需要做一些扫尾工作。我们不需要包括 "40" 这个背景颜色设置,因为它将背景设置为黑色,而黑色是默认颜色。此外,绿色还很暗;我们通过添加一个 "1" 颜色代码来修正这个问题,这将启用更亮的加粗文字。除了这个修改之外,我们还需要将全部非打印字符用专用的 bash 转义序列 "\[" 和 "\]" 括起来。这两个序列通知 bash,被括起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。没有这两个转义序列,尽管您有了一个非常漂亮的提示行,但是如果您键入的命令恰好到达终端的最右端,就会造成显示混乱。



下面是我们最终的提示行:

export PS1="\[\e[32;1m\]\w>; \[\e[0m\]"

别担心在同一个提示行中使用几种颜色,就像下面这样:

export PS1="\[\e[36;1m\]\u@\[\e[32;1m\]\H>; \[\e[0m\]"



Xterm 中的乐趣



我已说明了如何在提示行中添加信息和颜色,但您还可以更进一步。您可以通过在提示行中添加专用代码来使 X 终端(如 rxvt 或 aterm)的标题栏得到动态更新。您所要做的只是将下面的序列添加到您的 PS1 提示行中:



"\e]2;titlebar\a"

只须用您希望其出现在 xterm 标题栏中的文字替换子串 "titlebar" 即可,现在已经一切就绪了!不必使用静态文字;您可以将 bash 转义序列插入标题栏中。请查看下面这个示例,它将用户名、主机名和当前工作目录显示在标题栏中,并定义了一个简短、明亮的绿色提示行:



export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>;\[\e[0m\] "

这就是我在上面的抓屏结果中所用的那个提示行。我喜欢这个提示行,因为它将全部信息显示在标题栏上,而不是显示在终端上,终端对一行可以显示多少字符有限制。顺便提一句,确保用 "\[" 和 "\]" 将您的标题栏序列括起来(因为就终端而言,这个序列是非打印序列)。将大量信息放在标题栏中的问题是,如果您使用非图形终端(如系统控制台),则看不到这些信息。为了解决这个问题,可以在您的 .bashrc 中添加以下几行:



if [ "$TERM" = "linux" ]
then
#we're on the system console or maybe telnetting in
export PS1="\[\e[32;1m\]\u@\H >; \[\e[0m\]"
else
#we're not on the console, assume an xterm
export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>;\[\e[0m\] "
fi



这个 bash 条件语句将根据当前的终端设置动态设置提示行。为了获得一致性,您一定希望配置您的 ~/.bash_profile,以便它在启动时搜索 (source) 您的 ~/.bashrc。确保您的 ~/.bash_profile 文件中有以下这样一行:



source ~/.bashrc



这样,无论您开启一个登录 shell 还是一个非登录 shell,都会获得同样的提示行。
分享到:
评论

相关推荐

    linux终端设置(提供代码)

    改变原来的单一界面 设置终端的提示符和字体颜色。 有详细的颜色描述和设置代码。 收集很全面。 让你的linux不再是枯燥单一。

    第三章 Linux基本命令操作

    Linux 终端介绍、 Shell 提示符、 Bash 基本诧法 3.1.1 登彔 Linux 终端 认识终端: 在 Linux 系统中,计算机显示器通常被称为控制台终端(Console)。它仺真了类型为 Linux 的一种终 端(TERM=Linux),幵且有一些“讴...

    Linux终端提示符(prompt)不如期生效的原因分析与解决

    Linux命令行是系统管理员管理Linux的重要手段,我们管理Linux,首先要面对的就是Linux命令行提示符。下面这篇文章主要给大家介绍了Linux终端提示符(prompt)不如期生效的原因以及解决方法,需要的朋友可以参考下。

    Linux源码分析报告——字符终端设备

    而打开这一动作,在UNIX下面通常是由一些守护进程所发起的,比如当我们在登录到一个虚终端的时候,通常是由一个进程agetty来打开这个虚终端(从 Linux的2.0.17的版本开始,开始改用另一个较小的程序mingetty来实现...

    linux修改命令行样式.md

    要修改linux终端命令行颜色,我们需要用到PS1,PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置。在终端输入命令:#set,即可在输出中找到关于PS1的定义如下:

    windows-python-compatibility-pack:一些使命令提示符与macOS和Linux终端相同的命令

    Windows的Python的兼容包 一些使命令提示符与macOS和Linux终端相同的命令

    ubuntu中终端命令提示符太长的修改方法汇总

    Linux(Ubuntu)终端 命令提示符太长 怎么办?下面这篇文章主要给大家介绍了关于ubuntu中终端命令提示符太长的修改方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。

    开源免费 Windows 终端 Windows Terminal 1.7.1033.0 中文免费版.zip

    它旨在改变用户访问命令提示符,PowerShell,WSL 和其他命令行外壳程序和应用程序的方式。您将能够在一个应用程序中使用所有这些工具,该应用程序支持多个选项卡,GPU加速和大量自定义。 开发人员的新工具 长期以来...

    实验一 Linux系统用户接口和编程界面

    2. 熟悉Linux字符界面——虚拟终端窗口和shell,以及图形界面——X-Window(如gnome或KDE):练习并掌握常用的Linux操作命令,如ls、cat、ps、df、find、grep、cd、more、cp、rm、kill、at、vi、cc、man、help、...

    开源免费 Windows 终端 Windows Terminal 1.8.1444.0 中文免费版.zip

    Windows 终端程序是一款新式、快速、高效、强大且高效的终端应用程序,适用于命令行工具和命令提示符,PowerShell 和 WSL 等 Shell 用户。主要功能包括多个选项卡、窗格、Unicode、和 UTF-8 字符支持,GPU 加速文本...

    详解linux下使用IOMETER测试磁盘IO性能.docx

    Linux终端介绍、Shell提示符、Bash基本语法 登录LINUX终端 两种终端仿真器:1、GNOME桌面的GHOME Terminal ; 2、KDE桌面的Konsole Terminal 远程连接终端工具: Xshell , CRT 。后期会教你安装。

    计算机操作系统练成Linux高手

     Linux窗口管理器,它可以打开一个特殊的窗口,即为终端窗口(terminal),它将为用户提供一个标准的命令行接口,用户可在窗口显示的提示符中输入带有选项和参数的命令。  看着别人操作那满屏幕的洋文,不可思议,...

    linux系统改用户名命令

    打开终端或命令提示符。 导航到包含用户信息的目录。例如,如果您要更改用户alice的用户名,可以使用以下命令: bash cd /home/alice 使用以下命令更改用户的用户名: usermod -u new_username new_username ...

    Linux shell实现阳历转农历

    写这个脚本之前是想在Linux 终端命令提示符中加入阳历及农历日期。在Ubuntu中有Lunar软件可以获取农历日期,但在Fedora或CentOS中并没有类似软件,所以就想自己来实现一个,但网上用其他语言写的一大把,如果再写没...

    RED HAT LINUX 6大全

    本书内容翔实、涉及领域广泛,并且提供了详细的例子和大量的参考资料(包括书籍、电子文档和Internet站点),是一本学习、使用和管理Linux不可多得的好书。 目 录 译者序 前言 第一部分 Red Hat Linux的介绍与安装 ...

    Linux 101 hacks (2nd)

    技巧40:用tput 改变提示符颜色 技巧41:使用已有的PS1 变量创建自己的提示符 技巧42:通过PS1 调用bash shell 函数 技巧43:通过PS1 中调用shell 脚本 第七章:归档和压缩 技巧 44:zip 命令基础 技巧 45:zip 高级...

    练成Linux系统高手

    因为你将会操作Linux窗口管理器,它可以打开一个特殊的窗口,即为终端窗口(terminal),它将为用户提供一个标准的命令行接口,用户可在窗口显示的提示符中输入带有选项和参数的命令。  看着别人操作那满屏幕的洋文...

    pwdshort:用于缩短 $PWD 以在终端中显示的 Linux 实用程序,例如在 bash PS1 提示符中

    密码短pwdshort是一个用 Go 编写的用于 Linux 的实用程序,用于缩短 $PWD 以在终端中显示,例如在 bash PS1 提示符中。编译要编译,请克隆存储库并运行$ go build pwdshort.go 。配置pwdshort配置存储在pwdshort....

    Linux shell 阳历转阴历.zip

    写这个脚本之前是想在Linux 终端命令提示符中加入阳历及农历日期。在Ubuntu中有Lunar软件可以获取农历日期,但在Fedora或CentOS中并没有类似软件,所以就想自己来实现一个,但网上用其他语言写的一大把,如果再写没...

Global site tag (gtag.js) - Google Analytics