使用自訂 .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 ];在您的.bashrc.

下面是它在實踐中的樣子:

在此輸入影像描述

  • 請注意,我在 Kali Linux 中使用 GNOME 終端連接到 Ubuntu 伺服器,這就是為什麼顏色與 Ubuntu 上相同程式碼產生的顏色略有不同的原因。

參考:

相關內容