Отображение ветки Git в скобках внутри терминала Ubuntu с помощью пользовательского скрипта .profile

Отображение ветки Git в скобках внутри терминала Ubuntu с помощью пользовательского скрипта .profile

У меня есть этот специальный .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и все должно заработать.


Кроме того, вот рабочий пример, где ~/.bashrcфайл по умолчанию (я предпочитаю редактировать этот файл вместо этого .profileв данном случае) Ubuntu Server 22.04 изменен, чтобы получить почти такой же, как вы хотите. Обратите внимание, что здесь я использую новый синтаксис подстановки команд $(). И функция 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.

Вот как это выглядит на практике:

введите описание изображения здесь

  • Обратите внимание, что я использую терминал GNOME в Kali Linux для подключения к Ubuntu Server, и именно по этой причине цвета немного отличаются от тех, которые будут получены с помощью того же кода в Ubuntu.

Использованная литература:

Связанный контент