Linux shell命令提示符

若是您很容易使 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 的一些很好的抓屏结果!
相关文章
相关标签/搜索