喜欢玩Linux的人,一般都是一个爱折腾的人,哈哈~~好巧 我就是这么一个爱折腾的人。
好了,那么接下来的要折腾点什么呢?
走起。。。下面就开始走入正题:如何在Linux下自定义shell提示符。
介绍
最初,所有的shell都是两个字符:一个字符后跟一个空格。Bourne shell使用一个$(美元字符),C-Shell使用一个%(百分比字符)。现在,这一传统仍然保持,因此,如果使用的shell是Bourne shell家族(Bash、Korn shell)中的一员,那么最简单的shell提示为:$
当今的linux发行版中,使用最广泛的shell版本为即为Bourne shell家族的Bash,本文即将讨论的也是基于Bash的shell。
使用命令 echo $0 或 echo $SHELL 可以查看你当前使用的是哪种shell。如果你使用的是Bash,那么你可以使用 bash --version 来查看你的Bash版本。
环境
Ubuntu 16.04.3 LTS 64位 (Linux version 4.4.0-97-generic)
使用命令:hostnamectl,可以查看当前主机的信息。
shell提示符的修改
Linux中,shell提示符是由一个环境变量定义的。对于Bourne shell家族来说,这个环境变量叫做PS1,我们可以通过 echo 命令来查看 PS1的内容。如:
[14:48:33 root@noseeHost ~]$ echo $PS1
\[\033[0;32m\][\t \u\[\033[0;33m\]@\H \w]$ \[\033[0m\]
上面输出的那个PS1值是我自己设置的,很多看不懂的乱七八糟的数字、还有一些特殊的字符?不必担心,看完这篇文章你就会懂了。
试试修改一个简单的提示符,包含主机名和当天时间的信息:
[14:59 root@noseeHost ~]$ PS1="\A \h \$ "
15:00 noseeHost $
可以看到命令行的提示符变成了 “15:00 noseeHost $ ”。是的,就是这么简单,通过修改环境变量PS1的值,可以实时的改变你的Shell提示符。但是,很快你就会发现,当你下次再登录上你的主机,或者当你重启你的主机后,Shell提示符又变回原来的默认样子了。
这是因为系统在每次启动的时候,都会去读取一个默认的配置文件,如果你想要你的设置永久生效,那你就需要去直接修改这个文件。
不同系统的这个配置文件可以会放在不同和位置和可能是不同的名字,一般是用户主目录下的.bashrc文件。为了达到目的,把下面两行代码添加到.bashrc文件中即可。
PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ '
export PS1
呃,说了这么多,好像还没说清楚那一个个特殊字符串和数字怎么回事。为了方便概括,下面就用一个稍微复杂一点的一个提示符来做解剖。
解剖一个提示符
首先,设置PS1的值为:
PS1="\[\033[0;32m\][\A \u\[\033[0;33m\]@\H \w]$ \[\033[0m\]"
这时你看到的结果如下:
1、\[\033[0;32m\]是用于设置文本的颜色,这是一个非打印字符序列(就是它是不会显示在你的提示符上面,但是会产生一些特殊的效果,如颜色变化)。你看到的 “[15:19 root” 显示为绿色就是因为它的作用。
还有后面的[\033[0;33m\]和\[\033[0m\]都是非打印字符序列。
2、\A 和 \u 都是转义字符,其中\A表示一个24小时制的一个时间表示,\u表示当前登录的用户名。
3、$,这会显示一个"$"字符,除非你拥有超级用户权限。在那种情况下, 它会显示一个"#"字符。
上面只是通过举个例子,来加强你对提示符变量PS1的理解。想要更加深刻的理解shell的每个提示符的含义一定要自己亲自动手,多去尝试。下面将会列出几个附表,一些常用的转义字符都可以在这里查看。
注意:如果你 shell 提示符的内容和上例不是一模一样,也不必担心。每个 Linux 发行版 定义的提示符稍微有点不同,其中一些相当异乎寻常。
附表1: Shell 提示符中用到的转义字符
附表2: 用转义序列来设置文本颜色
附表3: 用转义序列来设置背景颜色
注意:除了正常的 (0) 和黑体 (1) 字符属性之外,文本也可以具有下划线 (4),闪烁 (5), 和反向 (7) 属性。为了拥有好品味,然而,许多终端仿真器拒绝使用这个闪烁属性。
附表4: 光标移动转义序列
转义编码也可以用来定位光标。这些编码被普遍地用来,每次当提示符出现的时候,会在屏幕的不同位置 比如说上面一个角落,显示一个时钟或者其它一些信息。这里是一系列用来定位光标的转义编码:
使用上面的编码,我们将构建一个提示符,每次当这个提示符出现的时候,会在屏幕的上方画出一个 包含时钟(由黄色文本渲染)的红色长条。提示符的编码就是这个看起来令人敬畏的字符串:
PS1='\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ '
哈哈,这个很有趣。
参考文献
《The Linux Command Line》William E. Shotts, Jr. —— 14 – Customizing The Prompt
《Unix&Linux大学教程》Harley Hahn —— 13.9 and 13.10