参考:
https://www.cnblogs.com/iois/p/11665825.html
https://blog.csdn.net/ikkyphoenix/article/details/119282386
https://github.com/agnoster/agnoster-zsh-theme
命令提示符-PS1
PS1
bash的命令提示符由环境变量PS1定义。
PS1 在每个命令之前显示的主提示符,因此它是每个人都不同的。
PS2 当一个命令需要更多的输入(例如,一个多行命令)中显示的辅助提示。
PS3 不是很常用。
PS4 也是不常用。
PS1语法格式
\u 表示用户(username);
\h 表示主机(hostname);
\w 表示当前工作目录(directory);
\$ 如果您不是超级用户 (非root),则插入一个 "$";如果您是超级用户(root),则显示一个 "#"。
\[ 这个字符应该出现在不占位转义字符(如颜色转义字符)之前,它使bash能够正确计算自动换行;
\] 这个字符应该出现在不占位转义字符(如颜色转义字符)之后;
\e ASCII转义字符序列开始(也可以键入 \033);
\a ASCII响铃字符(也可以键入 \007);
\d "Wed Sep 06"格式的日期;
\H 主机的全称(如 "mybox.mydomain.com");
\j 在此shell中通过按 ^Z挂起的进程数;
\l 此shell的终端设备名 (如"ttyp4");
\n 换行符;
\r 回车符;
\s shell的名称(如 "bash");
\t 24小时制时间(如 "23:01:01");
\T 12小时制时间(如 "11:01:01");
\@ 带有 am/pm的 12小时制时间;
\v bash的版本(如 2.04);
\V Bash版本(包括补丁级别) ?/td>;
\W 当前工作目录的“基名 (basename)”(如 "drobbins");
\! 当前命令在历史缓冲区中的位置;
\# 命令编号(只要您键入内容,它就会在每次提示时累加);
\xxx 插 入一个用三位数 xxx(用零代替未使用的数字,如 "/007")表示的 ASCII 字符;
\\ 反斜 杠。
PS1配色方案
颜色控制部分:\[
+配色格式+\]
其中配色格式以\e[
开始,m
结束 (\e
表示escape
,八进制\033
,下同)
\e[ X m
- X
- X可以分别由A、B、F或它们的组合表示,组合时由分号“;”分割
- X <=> A(或B或F)
- X <=> A;B;F(或B;A或其它任意方式,甚至可以A;B;F;A) 总之,后面的配置会影响前面的配置。比如,F会影响A和B的配置 。
- B为背景颜色,编号40~47
- A为文本属性
- F为字体颜色,编号30~37
- 关闭颜色输出:
\e[00m
颜色、属性控制表:
背景颜色(B) | 文本属性(A) | 文本颜色(F) |
---|---|---|
40:黑色 | 00:重置文本和背景 | 30:黑色 |
41:红色 | 01:设置高亮度 | 31:红色 |
42:绿色 | 04:下划线 | 32:绿色 |
43:黄色 | 05:闪烁 | 33:黄色 |
44:蓝色 | 07:反显 | 34:蓝色 |
45:紫色 | 08:消隐 | 35:紫色 |
46:青色 | 36:青色 | |
47:白色 | 37:白色 |
在一个X内,后面的A、B、F设置会影响前面的A、B、F设置,会直接影响此X的设置结果在不同X之间,如先X1和后X2。X2只能影响到X1在X2之后的显示(即X2之后的内容由X1和X2叠加共同作用),在X1到X2之间仍由X1显示,X2无法影响。
有了以上格式基础,就可以自由地修改PS1了。
手搓 agnoster 风格提示栏
- 需要提前安装好Powerline字体,可参考:vim-airline( 包含Powerline字体下载)
- 如果不喜欢提示栏字体为粗体,将下面的
01
删去即可,如\[\033[01;30;43m\]
->\[\033[30;43m\]
。
# agnoster主题
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30;43m\] \u@\h \[\033[01;33;44m\]\[\033[01;30;44m\] \w \[\033[00;01;34m\] \[\033[00m\]'
# agnoster主题-去用户名版
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;30;44m\] \w \[\033[00;01;34m\] \[\033[00m\]'
手搓 Parrot OS 风格提示栏
# 蓝色弯
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]╭──[\[\033[01;32m\]\u@\h\[\033[01;34m\]]-[\[\033[01;36m\]\w\[\033[01;34m\]]\n\[\033[01;34m\]╰─\[\033[00m\]\$ '
# 蓝色直角
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]┌──[\[\033[01;32m\]\u@\h\[\033[01;34m\]]-[\[\033[01;36m\]\w\[\033[01;34m\]]\n\[\033[01;34m\]└─\[\033[00m\]\$ '
终端标题
修改完PS1后,会出现一个问题:原本实时显示user@host:dir的GNOME 终端模拟器标题只能显示Terminal了。
想要获得上图所示的效果,可以在.bashrc
中进行如下设置:
# 终端状态栏中显示user@hostname:dir
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/\~}\007"'
在 GNOME 终端(gnome-terminal)中,终端标题是通过特殊的控制序列设置的。GNOME 终端支持 ANSI 转义序列,其中\033]0;...\007
被可以用来设置终端的标题。
PROMPT_COMMAND
是一个在每次显示新的提示符之前执行的命令,结合echo
命令设置为在每次提示符出现之前更新终端标题。
echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD/#$HOME/\~}\007"
-n
和-e
是echo
命令的选项-n
选项表示在输出文本之后不要添加换行符-e
选项表示启用转义字符的解释,这样echo
就可以解释包含转义字符的特殊序列
${PWD/#$HOME/\~}
这部分使用了 Bash 的字符串替换操作,将$HOME
(用户的主目录)替换为~
这样,每次执行cd
时,终端标题都会相应地更新。
更换目录字体颜色
shell处于暗色背景时,默认的蓝色目录字体不是很明显,为了方便查看,可以在.bashrc
中将其设置为更加显眼的青色。
# 将ls显示目录字体换成青色,以适应偏紫色主题
export LS_COLORS=${LS_COLORS}'di=01;36':