如果您很容易使 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 Unleashed、SuSE Linux
Unleashed 和 Samba Unleashed 几本书的重要作者之一。由于深受 Pan Man 的影响,Daniel
在读二年级时第一次接解到 Logo编程语言后即执迷于计算机。这可能是他后来作为 SONY Electronic
Publishing/Psygnosis 的首席图形艺术家的原因。Daniel 喜欢与他的妻子 Mary 和他的新出生的女儿 Hadassah
共度美好时光。可以通过 drobbins@gentoo.org 与 Daniel 联系。
分享到:
相关推荐
### 命令提示符最新命令详解 #### 概述 在Windows系统中,命令提示符(Command Prompt)作为用户与操作系统交互的重要工具之一,提供了大量的命令来帮助用户完成各种任务,如文件管理、系统配置等。本文将详细介绍一...
- **cmd.exe**:命令提示符,Windows的标准命令行界面,可以执行各种DOS命令和批处理脚本。 - **notepad**:记事本,一个简单的文本编辑器,用于创建和编辑纯文本文件。 - **dxdiag**:DirectX诊断工具,用于检查和...
### Windows命令提示符详解 #### 一、attrib — 修改文件属性 **命令格式:** - `attrib [文件路径] [+r|-r] [+h|-h] [+s|-s] [+a|-a]` - `attrib [文件路径] /s` **功能描述:** - `+r` 或 `-r` 设置或清除只读...
双击这个"右键菜单命令提示符.reg"文件,系统会提示确认是否导入注册表信息,确认后即可生效。需要注意的是,直接修改注册表有一定的风险,如果不正确操作可能导致系统不稳定,因此在操作前应确保有备份。 具体到这...
在Windows操作系统中,命令提示符(CMD)是一个强大的工具,它允许用户通过输入特定的命令来执行各种系统级操作。`net`命令是CMD中一个非常重要的命令集,用于管理和配置网络服务。这篇详细的讲解将深入探讨`net`...
根据提供的文件信息,我们可以深入探讨与“命令提示符”相关的几个关键知识点,包括其基本概念、常用命令及其应用场景等。 ### 命令提示符的基本概念 命令提示符(Command Prompt),是Windows操作系统中用于执行...
### C命令提示符常用命令集合 #### 概述 本文档整理了Windows XP系统下命令提示符(CMD)中常用的命令及其用法。这些命令在系统管理、网络配置及日常维护等方面发挥着重要作用。 #### 命令详情 ##### 1. `...
为了提高用户体验,可以设计友好的提示信息和错误处理机制。 5. 程序流程: - 初始化:程序启动时,检查是否存在已保存的通讯录文件,如果有,则加载数据。 - 循环交互:进入主循环,显示菜单供用户选择操作。...
在深入探讨《window的全部命令提示符》这一主题前,我们先来理解其核心概念——命令提示符(Command Prompt)。命令提示符是Windows操作系统中一个非常重要的工具,它允许用户通过输入文本命令来控制和操作计算机...
**用途:** 更改命令提示符。 **示例:** 使用`prompt $p`可以显示当前目录作为提示符的一部分。 #### 48. PUSHD **命令:** `pushd` **用途:** 改变当前目录并将前一个目录压入堆栈。 **示例:** 使用`pushd directory...
### 很完善的CMD命令提示符知识点详解 #### 一、概览 在计算机操作与管理领域,命令行工具因其高效性和灵活性而备受青睐。本文旨在详细介绍一个“很完善的CMD命令提示符”文档中的各种命令及其用途,这些命令覆盖...
### CMD命令提示符知识点详解 #### 一、CMD概述 - **定义**:“CMD”是“Command”的缩写,指的是Windows操作系统中的命令行工具。它为用户提供了一个通过文本命令进行系统管理和程序执行的方式。 - **历史沿革**:...
在Windows操作系统中,CMD(命令提示符)是一个强大的工具,用于执行系统级别的操作,包括配置网络设置,如修改计算机的IP地址。这篇文章将详细介绍如何使用CMD命令来更改IP地址,并探讨相关的重要知识点。 首先,...
在本文中,我们将深入探讨DOS命令提示符中的常见命令及其用途。 1. **Net Use**: `net use`命令用于管理网络连接和共享资源。例如,`net use \\ip\ipc$ "password" /user:"username"`创建一个到远程计算机的IPC...
在Windows操作系统中,DOS命令行(也称为命令提示符)是一种强大的工具,允许用户执行各种系统级操作,包括配置网络设置,如修改IP地址。本文将深入探讨如何在DOS命令行环境下更改计算机的IP地址,这对于网络管理员...
13. 下面哪个文件代表系统初始化信息? 答案:/etc/inittab 知识点:/etc/inittab 文件用于存储系统初始化信息,例如系统启动级别和服务配置。 14. 哪条命令从当前系统切换到启动级别 1? 答案:init 1 知识点...
- 在命令提示符中输入`ipconfig`,按回车键查看所有网络接口的信息。 - 注意记录下需要更改IP地址的连接名称,这通常显示为“以太网适配器”后面跟着具体的名称,例如“以太网”或“本地连接”。 3. **修改IP地址...
标题 "右键菜单命令提示符注册表,双击导入" 指的是通过修改Windows操作系统中的注册表设置,将“命令提示符”添加到桌面或文件夹的右键快捷菜单中,以便用户能够快速访问和运行命令行工具。在Windows系统中,注册表...
在获取NET命令的帮助时,用户可以在图形界面下通过“开始”->“帮助”->“索引”->“输入NET”来查找,或者在命令提示符下输入“NET /?”、“NET”或“NET HELP”命令来获取简要帮助。对于特定命令的帮助,可以使用...