提示行魔术----增强系统提示行

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

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

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

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

"e[0m"

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

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

export PS1="w> "

变为:

export PS1="e[32;40mw> "

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

export PS1="e[32;40mw> 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;titlebara"

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

export PS1="[e]2;u@H wae[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 wae[32;1m]>[e[0m] " 
fi

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

source ~/.bashrc

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

好了,您已掌握了提示行魔术。现在尽情享受一下,制作一个漂亮的彩色提示行吧!

参考资源

  • rxvt 是一款既好又小的 xterm,它恰好有大量关于转义序列的文档资料,这些资料都集中在源代码 tar 包中的 "doc" 目录下。
  • aterm 是基于 rxvt 的另一款终端程序。它支持几种很好的可视化特性,如透明和着色。
  • bashish 是适用于各种终端的一种主题引擎。请查看工作中的 bashish 的一些很好的抓屏结果

作者简介
Daniel Robbins 住在新墨西哥州的 Albuquerque,他是 Gentoo Technologies 公司的总载兼首席执行官,他还是 Gentoo Linux(一种运行于个人计算机上的高级 Linux)和 Portage 系统(Linux 的下一代端口系统)的创作者。他同时也是 Macmillan 出版的 Caldera OpenLinux UnleashedSuSE Linux UnleashedSamba Unleashed 几本书的重要作者之一。由于深受 Pan Man 的影响,Daniel 在读二年级时第一次接解到 Logo编程语言后即执迷于计算机。这可能是他后来作为 SONY Electronic Publishing/Psygnosis 的首席图形艺术家的原因。Daniel 喜欢与他的妻子 Mary 和他的新出生的女儿 Hadassah 共度美好时光。可以通过 drobbins@gentoo.org 与 Daniel 联系。

转载:提示行魔术

IBM Bluemix点击按钮,开始云上的开发! 开始您的试用 登录 | 注册 IBM 技术主题 软件...
  • u013181648
  • u013181648
  • 2015年08月19日 08:24
  • 350

linux安装步骤(CentOS 7.3)

linux安装步骤(CentOS 7.3)事先准备好VMwareWorkstation跟iso镜像    VMwareWorkstation下载地址     (http://rj.baidu.com...
  • qq_39526788
  • qq_39526788
  • 2017年07月16日 18:02
  • 513

Linux中使用 alias 来简化命令行输入

alias(中文称为“别名”)允许使用更加简短的名称来重新定义 Linux 中的 Shell 命令,从而简化命令行的输入。如果经常与 CLI 打交道,那么使用 alias 不仅会节省时间,而且也能提高...
  • kobejayandy
  • kobejayandy
  • 2014年08月20日 19:37
  • 1993

shell提示行变色

在 bash 下,可以通过更改 PS1 环境变量的值来设置提示行,如下所示: $ export PS1="> " > 更改会立即生效,通过将 "export" 定义放在您的 ~/.bashrc 文件...
  • duan1522630316
  • duan1522630316
  • 2013年11月20日 14:19
  • 832

用命令行来启动应用,如QQ这类的,提升逼格,大牛勿喷,3Q

用命令行来启动应用,如QQ这类的。这里只讲方法,不讲原理,因为我也只懂皮毛;下面是步骤: 1、随便在哪里建一个文件夹,把需要启动的应用的快捷键都copy到里面;最好改一下应用的名字,方便敲入嘛; ...
  • PeanutXu
  • PeanutXu
  • 2015年04月30日 10:20
  • 476

8个实用而有趣Bash命令提示行

很多人都对过命令行提示的重要性不屑一顾,甚至是一点都不关心。但是我却一点都不这么认为,一个好的命令行提示可以改变你使用命令的方式。为此,我在internet上找到一些非常实用,优秀,并有趣的bash的...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年11月24日 09:58
  • 871

PHP魔术方法和魔术变量总结

从php5以后的版本,类就可以使用魔术方法了。php规定以两个下划线开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开 头,除非是为了重载已有的魔术方法。目前php已有的魔术方法有 __co...
  • u010187139
  • u010187139
  • 2015年07月11日 12:46
  • 1676

在ubuntu terminal(终端)的命令提示行 隐藏/显示 当前工作目录

ubuntu的终端里,命令行提示是默认显示当前工作目录的绝对路径,如下: user@system:/folder1/folder2/folder3/folder4$ 当绝对路径比较长的时候就有点烦了,...
  • xjwJava
  • xjwJava
  • 2013年07月21日 17:11
  • 7931

在ubuntu 终端的命令提示行 隐藏/显示 当前工作目录

ubuntu的终端里,命令行提示是默认显示当前工作目录的绝对路径,如下: [plain] view plaincopy user@system:/f...
  • ebw123
  • ebw123
  • 2014年12月20日 19:25
  • 932

【网络流24题】魔术球问题

Description假设有 n根柱子,现要按下述规则在这 n根柱子中依次放入编号为 1,2,3,…的球。(1)每次只能在某根柱子的最上面放球。(2)在同一根柱子中,任何 2个相邻球的编号之和为完全平...
  • magical_qting
  • magical_qting
  • 2016年03月05日 17:11
  • 1157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:提示行魔术----增强系统提示行
举报原因:
原因补充:

(最多只允许输入30个字)