定制个性化Shell提示符
- 贡献者:HHJ
- 阅读:1607
- 类别:环境变量
- 更新时间:2017-10-11 10:14:14
1. 给ls命令添加颜色支持
FreeBSD 默认安装系统后并没有像 Linux 那样给我们提供 ls
命令配色方案的支持,其实并不是系统不支持,而是需要用户自己定制。由于 FreeBSD 默认使用的是 csh 所以当前用户的环境变量大多定义于当前用户 home
目录下的 .cshrc
1.1 方案1-使用别名提供支持
原理:FreeBSD 下 ls -G 即为使用 ls 的默认配色方案打印输出,那么我们就可以把 ls -G 定义成 ls 的别名,也就是每当调用 ls 的时候,实际上调用的是 ls -G。编辑当前用户的.cshrc
文件,下面以 root 为例
编辑 /root/.cshrc
添加别名
alias ls ls -G
1.2 方案2-打开颜色支持
原理:打开 ls 命令的色彩支持功能,但是我们这次使用的方法是把颜色开关变量置 1,同样编辑当前用户的.cshrc
文件,下面以 root 为例
编辑 /root/.cshrc
文件添加变量开关
setenv CLICOLOR yes
1.3 自定义颜色支持
如果不喜欢当前系统的配色,用户可以自定义配色方案,需要编辑.cshrc
文件,下面以 root 为例
编辑 /root/.cshrc
文件添加配色变量
setenv LSCOLORS gxfxaxdxcxegedabagacad
其中以上示例中的配色定义分组为
色组 | gx | fx | ax | dx | cx | eg | ed | ab | ag | ac | ad |
组号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
每个配色方案中分为11组,每组由两个基础颜色字符组成,其中第一个字符为前景色,第二个字符为背景色,以下为 11 个配色组所代表的文件类型说明:
第1组 | 目录颜色 | 第2组 | 软连接颜色 |
第3组 | socket文件颜色 | 第4组 | 管道文件颜色 |
第5组 | 可执行文件颜色 | 第6组 | 块设备文件颜色 |
第7组 | 字符设备文件颜色 | 第8组 | 设置了setuid位的可执行文件颜色 |
第9组 | 设置了setgid位的可执行文件颜色 | 第10组 | 设置了粘滞位并且他人可写的目录颜色 |
第11组 | 未设置粘滞位并且他人可写的目录颜色 |
|
|
以下为颜色代码说明:
a-->黑色 | b-->红色 | c-->绿色 | d-->棕色 | e-->蓝色 | f-->洋红色 |
g-->青色 | h-->浅灰色 | A-->褐色粗体 | B-->红色粗体 | C-->绿色粗体 | x-->系统默认色 |
2. 定制个性化提示符
FreeBSD 默认行为并不扩展提示符,也就是最原始的状态,同 ls 命令一样,并不是系统不支持这种特性,而是要用户自己进行量身定制
2.1 根据示例解释扩展提示符
当前用户的默认提示符在默认情况下只是一个简单的 “#” 号,如果想要扩展提示符,可按如下示例操作
编辑 /root/.cshrc
文件替换当前提示符扩展
#set prompt = "%N@%m:%~ %# " set prompt = "%{\e[0;31m%}%B%m@%n%{\e[m%}[%{\e[0;32m%}%/%{\e[m%}]%# "
其中变量串中的普通变量含义如下:
变量 | 解释 | 变量 | 解释 |
---|---|---|---|
%m | 机器的主机名称 | @ | 分割符号,无具体含义 |
%n | 用户名 | %B | 为粗体开始 |
%/ | 当前工作目录的完整名称 | %# | 扩展当前用户身份提示符 |
其中颜色变量解释如下:
颜色变量 | 解释 |
---|---|
%{\e[X;Y;Zm%} | 表示定义开始颜色,其中的 X 代表前景色 Y 代表背景色 Z 代表颜色深度,一般可省略 |
%{\e[m%} | 表示当前颜色结束 |
通过对以上示例的理解用户不难定制出属于自己的个性提示符变量,下面另附一张普通提示符变量表:
变量 | 解释 | 变量 | 解释 |
---|---|---|---|
! | 和 %h 一样,参考 %h | %B | 开始粗体模式 |
%b | 结束粗体模式 | %c | 当前工作目录名称的最后部分 |
%c2,%c3... | 当前工作目录名称的最后两个、三个(n个)组成部分 | %C | 跟%c类似,但是使用长形式的目录名称 |
%d | 本周的当天 | %D | 今天是当月中的第几天 |
%h | 当前命令的历史记录编号 | %l | shell的当前控制终端 |
%L | 清除从提示符末尾到下一行的所有内容 | %m | 机器的主机名称 |
%M | 机器的完全符合规范的域名 | %n | 用户名 |
%p | 用精确格式(包括秒)显示的12小时制时间 | %P | 用精确格式(包括秒)显示的24小时制时间 |
%S | 开始标准输出格式 | %s | 结束标准输出格式 |
%t | 以12小时制格式显示时间 | %T | 以24小时制格式显示时间 |
%U | 开始下划线模式 | %u | 结束下划线模式 |
%w | 当前月的名称 | %W | 当前月的序数 |
%y | 以2位格式表示的年 | %Y | 以4位格式表示的年 |
%% | %字符 | %! | 跟%h相同 |
%@ | 跟%t相同 | $# | 扩展到>供常规使用,如果用户正以root身份运行的话,就扩展到# |
%/ | 当前工作目录的完整名称 | %- | 以短格式表示的当前工作目录 |
^C | 跟C匹配的控制字符:例如^G代表Ctrl+G | \a | 使tcsh在任何时候显示提示符时嘟嘟响 |
\e | 终止的escape符0x1B | \f | 终止的换页符 |
\n | 在这个位置开始一个新行 | \r | 回车符 |
\t | Tab制表符 | \v | 垂直制表符 |
\nnn | 由八进制数字nnn所指定的字符 |
|
|
2.2 给一个比较复杂的提示符
下面给大家一个比较复杂的提示符示例,此示例可以稍加修改或者不加修改而直接使用
#set prompt = "%N@%m:%~ %# " set prompt = "%{\e[0;31;1m%}%B%m%{\e[m%}%{\e[0;35;1m%}@%{\e[m%}%{\e[0;36;1m%}%n%{\e[m%}%{\e[0;33;1m%}[%{\e[m%}%{\e[0;32;1m%}%~%{\e[m%}%{\e[0;33;1m%}]%{\e[m%}# "
最终效果如下
iceage@root[/usr/local/etc]#