使用自定义 .profile 脚本在 Ubuntu 终端内以括号显示 Git 分支

使用自定义 .profile 脚本在 Ubuntu 终端内以括号显示 Git 分支

我有这个自定义.profile脚本:

PS1='\[\033]0;WSL2 Bash\W\007\]' # set window title
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'\[\033[36m\]'       # change to green
PS1="$PS1"'bash@bexgboost '         # user@host<space>
PS1="$PS1"'\[\033[31m\]'       # change to brownish yellow
PS1="$PS1"'\W'                 # current working directory
if test -z "$WINELOADERNOEXEC"
then
    GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
    COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
    COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
    COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
    if test -f "$COMPLETION_PATH/git-prompt.sh"
    then
        . "$COMPLETION_PATH/git-completion.bash"
        . "$COMPLETION_PATH/git-prompt.sh"
        PS1="$PS1"'\[\033[35m\]'  # change color to cyan
        PS1="$PS1"'`__git_ps1`'   # bash function
    fi
fi

PS1="$PS1"'\[\033[0m\]'        # change color
PS1="$PS1"'\n'                 # new line
PS1="$PS1"'$ '                 # prompt: always $

目前,当我启动终端时它看起来像这样:

在此处输入图片描述

该脚本应该显示这样的分支名称:

在此处输入图片描述

忽略目录名称的不匹配。

我究竟做错了什么?

答案1

您的代码中的问题出现在第 18 行:

PS1="$PS1"'`__git_ps1`'   # bash function

这里您使用了命令替换(旧式的反引号),调用函数时__git_ps1应该用其输出替换它,但我在示例代码中看不到该函数的定义。因此我认为您可以在该行之前的某处添加以下函数定义:

__git_ps1() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

然后保存并获取配置文件 - . .profile,它就应该可以工作了。


此外,这里有一个工作示例,其中 Ubuntu Server 22.04 的默认~/.bashrc文件(在这种情况下,我更喜欢编辑这个文件而不是.profile)被更改为几乎与您想要的外观相同。请注意,这里我使用了命令替换的新语法$()。并且该函数parse_git_branch()在调用之前就已定义。

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

if [ "$color_prompt" = yes ]; then
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # green
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;33m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # yellow
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # blue
     PS1='${debian_chroot:+($debian_chroot)}\[\033[01;35m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # purple
    #PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]' # red

     PS1="${PS1}\[\033[01;33m\]\$(parse_git_branch)\[\033[0m\]\n" # HERE WE CALL THE FUNCTION THAT PARSE THE BRANCH
     PS1="${PS1}\$ "
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

.bashrc仅显示相关的行。对于默认状态,请if [ "$color_prompt" = yes ];在您的 中找到语句(大约第 70 行).bashrc

实际情况如下:

在此处输入图片描述

  • 注意,我使用 Kali Linux 中的 GNOME 终端连接到 Ubuntu 服务器,这就是为什么颜色与 Ubuntu 上相同代码生成的颜色略有不同。

参考:

相关内容