China FreeBSD

定制个性化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]#