设置终端颜色详解

PS1 在每条新命令之前所显示的提示符
PS2 如果一条命令没有完成,在一个新行前所显示的提示符
PS3 通过select内置命令显示的提示符
PS4 通过-x调试显示的提示符

在 shell 下,可以通过更改 PS1 环境变量的值来设置提示行,如下所示:

$ export PS1="This is my super prompt >"
This is my super prompt >

大多数定制的提示行包含诸如用户名、工作目录或主机名之类的信息。例如,下面的提示行将显示您的用户名和主机名:

$ export PS1="/u@/H >"
username@hostname >

在上面的示例中,使用了专用的用反斜杠转义的字符序列,当这些转义字符序列出现在 PS1 变量中时,shell 就会用特定的值替换它们。
序列 "/u"(表示用户名)和 "/H"(表示主机名的第一部分)。
下面是 bash 可识别的全部专用序列的完整列表:

序列 说明
/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 版本(包括补丁级别
/w 当前工作目录(如 "/home/drobbins")
/W 当前工作目录的“基名 (basename)”(如 "drobbins")
/! 当前命令在历史缓冲区中的位置
/# 命令编号(只要您键入内容,它就会在每次提示时累加)
/$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#"
/xxx 插入一个用三位数 xxx(用零代替未使用的数字,如 "/007")表示的 ASCII 字符
// 反斜杠
/[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。
/] 这个序列应该出现在非打印字符序列之后。

彩色化
添加颜色所要做的只是添加终端(而不是 bash)可识别的专用转义序列,以使它以彩色显示文本的某些部分。
标准 Linux 终端和 X 终端允许设置前景(文字)颜色和背景颜色。

颜色是通过在 PS1 中添加专用序列来选择的,基本上是夹在 "/e[" 和 "m" 之间数字值。如果指定一个以上的数字代码,则用分号将它们分开。
下面是一个颜色代码示例:

"/e[0m"

如果将数字代码指定为零,则它就会通知终端将前景、背景和加粗设置重置为它们的默认值。
前景编号 (30-37) 和背景编号 (40-47)。下面的定义:

export PS1="/w >"
变为:
export PS1="/e[32;40m/w >"

在 shell 显示出工作目录以后,可以使用 "/e[0m" 序列将颜色重新设置为正常值。

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

这个定义将显示一个漂亮的绿色提示行,但仍需要做一些扫尾工作。
需要将全部非打印字符用专用的 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" 即可,现在已经一切就绪了!
请查看下面这个示例,它将用户名、主机名和当前工作目录显示在标题栏中,并定义了一个简短、明亮的绿色提示行:

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


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

if [ "$TERM" == "linux" ]
then
    export PS1="/[/e[32;1m/]/u@/H > /[/e[0m/]"
else
    export PS1="/[/e]2;/u@/H /w/a/e[32;1m/]>/[/e[0m/]"
fi

source可以初始化刚修改过的文档
source ~/.bash_profile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值