根据关于此主题的几个教程,我添加了一个函数来.bashrc
解析我当前正在处理的 git 分支并将其显示在我的 bash-prompt 中。我的代码片段如下所示:
parse_git_branch() {
BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ "$BRANCH" != "" ]; then
echo -e "[\e[1;31m⎇ $BRANCH\e[1;37m]"
else
echo "╼"
fi
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[1;37m\]┌[\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;32m\]\H\[\033[1;37m\]] [\w]\n└$(parse_git_branch) \[\033[00m\]'
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
如果有的话,这将按预期以红色打印当前 git 分支: 截屏
但是,如果命令真的很长,那么行就不会再中断: 另一张截图
-e
如果我不使用标志,问题就会消失echo
,parse_git_branch
但我需要它将分支涂成红色。
有想法该怎么解决这个吗?
我在谷歌搜索时发现的所有其他解决方案都只是打印彩色的 git 分支或什么都不打印,所以它们对我来说不太适用,因为如果有 git 分支的话,我希望它打印它如果不╼
用白色打印该字符。
答案1
将颜色序列包装在 readline 转义符中,如下所示:
echo -e "[\001\e[1;31m\002⎇ $BRANCH\001\e[1;37m\002]"
readline 转义位于\001
非打印序列的开头和\002
结尾。它们分别相当于PS1 字符串中的\[
和。\]