导读 | 之前有读者问到,如何在终端显示当前的git分支,实际上这就是自定义终端显示配置了。不过在直接介绍如何显示当前分支之前,来看看到底怎么回事。 |
bashrc配置
每次我们登录一个shell终端的时候,前面都有一些固定的显示信息:
root@ubuntu:#
这些显示信息其实可以配置的。
我们打开用户家目录下的.bashrc文件,找到类似下面的关于PS1的内容:
if [ "$color_prompt" = yes ]; then ? ? PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ ' else ? ? PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ ' fi
这里就是用来配置你的终端显示的了。
举个例子:
$?echo?-e?"\033[31m?red?color?\033[0m" ?red?color
而其他的符号什么意思呢?
\d?:代表日期, \H?:完整的主机名称 \h?:仅取主机的第一个名字 \t?:显示时间为24小时格式,如:HH:MM:SS \T?:显示时间为12小时格式 \A?:显示时间为24小时格式:HH:MM \u?:用户名 \v?:BASH的版本信息 \w?:完整的工作目录名称 \W?:列出最后一个目录 \$?:提示字符,如果是root时,提示符为:#?,普通用户则为:$
所以说白了,就是根据你自己的需要配置自己终端想要的信息。
这个时候我们再来看前面的其中一条简单的配置:
'${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
$debian_chroot这里我们可以忽略,因为它是一个变量的值,我们完全可以自定义。
可以看到这里有:
\u?用户名 \h?主机名 \W?最后一个目录名 \$?提示字符
而通过命令获取的相关内容分别为:
$?whoami root $?hostname ubuntu $?basename?`pwd` 公众号编程珠玑
所以我的终端最终显示的是:
root@ubuntu:公众号编程珠玑#
通常来说,默认的配置就可以了,经常需要改动的可能就是默认它显示了全路径,这里只需要将\w 替换为 \W即可。
然后执行命令:
source?~/.bashrc
让配置生效即可。
再来梳理一下过程:
- 根据需要修改PS1显示项
- 执行source .bashrc使其生效
这里注意,Linux启动过程中,配置文件加载是有顺序的,
某用户家目录下的bashrc只影响当前用户,如果想要全系统修改生效,可以修改/etc/bash.bashrc(系统差异,可能不一样)。
如何显示当前git分支
其实到这里你应该基本上已经明白了,无非就是将git当前分支的信息配置在PS1中罢了。
如何获取当前git分支
我们都知道:
$?git?branch ??master *?testBranch
可以查看分支信息,其中前面有*的表示当前所在分支,所以我们通过字符处理拿到即可。
或者直接通过命令:
$?git?rev-parse?--abbrev-ref?HEAD testBranch
拿到。
将分支信息配置在PS1中
考虑到有的目录下可能并不存在git项目,所以需要做是否为空的判断,也要注意处理标准错误。因此将获取git分支信息的部分写成一个shell函数:
git_branch() { ???branch=`git?rev-parse?--abbrev-ref?HEAD?2>/dev/null` ???if?[?"${branch}"?!=?""?] ???then ???????if?[?"${branch}"?=?"(no?branch)"?] ???????then ???????????branch="(`git?rev-parse?--short?HEAD`...)" ???????fi ???????echo?"($branch)" ???fi }
将其加入到.bashrc文件结尾中,然后修改PS1的内容:
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W$(git_branch)\$?' PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W$(git_branch)\[\033[00m\]\$?'
修改完成后保存,执行:
$?source?~/.bashrc
当前里面的颜色你可以根据自己的需要自定义。再来看看之前的效果,是不是觉得没那么难配置了?
总结
实际上就是根据自己的需要去配置终端显示罢了,可以自己选择颜色,变量内容等等。