关于自己定制自己的shell提示符

虽然parrot的shell提示符已经是很骚气了。但是作为喜欢折腾,没有麻烦制造麻烦也要上的我还是决定搞一下事情。

shell提示符的变量

提示符是由 PS1这个环境变量进行定义。我们可以使用echo $PS1命令来打印我们现在的shell命令提示符号的代码。
如图所示:

简单解释一些变量的含义

 \a 	以 ASCII 格式编码的铃声 . 当遇到这个转义序列时,计算机会发出提示声。
\d 	以日,月,天格式来表示当前日期。例如,“Mon May 26.”
\h 	本地机的主机名,但不带末尾的域名。
\H 	完整的主机名。
\j 	运行在当前 shell 会话中的工作数。
\l 	当前终端设备名。
\n 	一个换行符。
\r 	一个回车符。
\s 	shell 程序名。
\t 	以24小时制,hours:minutes:seconds 的格式表示当前时间.
\T 	以12小时制表示当前时间。
\@ 	以12小时制,AM/PM 格式来表示当前时间。
\A 	以24小时制,hours:minutes 格式表示当前时间。
\u 	当前用户名。
\v 	shell 程序的版本号。
\V 	Version and release numbers of the shell.
\w 	当前工作目录名。
\W 	当前工作目录名的最后部分。
\! 	当前命令的历史号。
\# 	当前 shell 会话中的命令数。
\$ 	这会显示一个"$"字符,除非你拥有超级用户权限。在那种情况下, 它会显示一个"#"字符。
\[ 	标志着一系列一个或多个非打印字符的开始。这被用来嵌入非打印 的控制字符,这些字符以某种方式来操作终端仿真器,比方说移动光标或者是更改文本颜色。
\] 	标志着非打印字符序列结束。 

文本颜色
\033[0;30m 	黑色 	
\033[1;30m 	深灰色
\033[0;31m 	红色
\033[1;31m 	浅红色
\033[0;32m 	绿色 	
\033[1;32m 	浅绿色
\033[0;33m 	棕色 	
\033[1;33m 	黄色
\033[0;34m 	蓝色 	
\033[1;34m 	浅蓝色
\033[0;35m 	粉红 	
\033[1;35m 	浅粉色
\033[0;36m 	青色 	
\033[1;36m 	浅青色
\033[0;37m 	浅灰色 	
\033[1;37m 	白色

背景颜色
\033[0;40m     蓝色
 \033[1;44m    黑色
\033[0;41m    红色
 \033[1;45m   粉红
\033[0;42m    绿色
 \033[1;46m   青色
\033[0;43m    棕色
 \033[1;47m   浅灰色

一般上面那一段是太长不看系列的东西,但是好像可以总结成一个公式\[\e[F;Bm\]其中“F”为字体颜色,编号30~37;“B”为背景色,编号40~47。

   前景     背景     颜色
  30      40      黑色
  31      41      红色
  32      42      绿色
  33      43      黄色
  34      44      蓝色
  35      45      紫红色
  36      46      青蓝色
  37      47      白色

代码      意义
0            OFF
1            高亮显示
4            underline            
7            反白显示
8            不可见

关于光标的行为常用的为以下几种,大家可以看看有什么可以用的

\033[l;cH       把光标移到第 l 行,第 c 列。

\033[nA         把光标向上移动 n 行。

\033[nB         把光标向下移动 n 行。

\033[nC         把光标向前移动 n 个字符。

\033[nD         把光标向后移动 n 个字符。

\033[2J         清空屏幕,把光标移到左上角(第零行,第零列)。

\033[K          清空从光标位置到当前行末的内容。

\033[s          存储当前光标位置。

\033[u          唤醒之前存储的光标位置。
开始我们的定制

首先,我们备份当前的环境变量

ps1Old="$PS1"

然后,我们需要验证一下我们真的成功备份了这个变量

echo $ps1Old

如图所示:

然后修改当前的变量

\[\033[0;31m\]]\[\033[01;33m\]\[\033[01;96m\]\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\t
\[\033[01;96m\]\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]      表示 红色的]-[

解释一下暂时我知道的shell默认的配置

\[\033[0;31m\]\342\224\214\342\224\200$([[ $? != 0 ]] && echo "[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200")[\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\$\[\e[0m\]

\[\033[0;31m 表示红色`

\]\342\224\214\342\224\200 貌似是八进制转移字符,这个暂时还没查到,欢迎诸位大佬进行补充。

[\[\033[0;39m\]\u以绿色打印当前用户名

\[\033[01;33m\]@用黄色打印@字符

\[\033[01;96m\]\h 打印主机名

\[\033[0;31m\]]\342\224\200[\[\打印红色的“]-["符号

033[0;32m\]\w打印绿色的当前目录

\[\033[0;31m\]]\n换行符
\[\e[01;33m\]\$打印$符号
\[\e[0m\]清除当前的提示符设置,以系统默认的方法来进行输出

然后大家就可以参照上面的解释来定制自己的shell提示符。,以下为我自己的提示命令

\[\033[1;33m\]\342\224\214\342\224\200$([[ $? != 0 ]] && echo "[\[\033[0;33m\]\342\234\227\[\033[0;37m\]]\342\224\200")[\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h\[\033[0;33m\]]\342\224\200[\[\033[1;34m\]\w\[\033[01;96m\]\[\033[0;33m\]]\342\224\200[\[\033[1;31m\]\t\[\033[01;96m\]\[\033[1;33m\]]\n\[\033[0;33m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\$\[\e[0m\]

效果如图

参考资料:《鸟哥的私房菜》《快乐的命令行》

若有好的建议,希望大家可以帮忙指出,谢谢

3 个赞

只适用于bash?..

刚弄了个zsh然后

export PS1="\[\033[0;31m\]\342\224\214\342\224\200$([[ $? != 0 ]] && echo "[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200")[\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\$\[\e[0m\]"

就成了。。


服务器资源由ZeptoVM赞助

Partners Wiki Discord