Exibir ramificação Git entre colchetes dentro do terminal Ubuntu usando script .profile personalizado

Exibir ramificação Git entre colchetes dentro do terminal Ubuntu usando script .profile personalizado

Eu tenho este .profilescript personalizado:

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 $

Atualmente, fica assim quando inicio o terminal:

insira a descrição da imagem aqui

O script deveria mostrar o nome do branch assim:

insira a descrição da imagem aqui

Ignore a incompatibilidade nos nomes dos diretórios.

O que estou fazendo de errado?

Responder1

O problema no seu código está na linha 18:

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

Aqui você está usando a substituição de comando (estilo antigo por crases) onde você chama a função __git_ps1e ela deve ser substituída por sua saída, mas não consigo ver a definição da função no seu código de exemplo. Então, acho que você pode adicionar a seguinte definição de função em algum lugar antes dessa linha:

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

Em seguida, salve e forneça o arquivo de perfil - . .profilee ele deverá funcionar.


Além disso, aqui está um exemplo prático, onde o ~/.bashrcarquivo padrão (prefiro editar este arquivo em vez de .profileneste caso) do Ubuntu Server 22.04 é alterado para obter quase a mesma aparência desejada. Observe aqui que estou usando a nova sintaxe de substituição de comando $(). E a função parse_git_branch()é definida antes de ser chamada.

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

Apenas as linhas relevantes de .bashrcsão mostradas. Para o estado padrão, encontre a instrução if [ "$color_prompt" = yes ];(por volta da linha 70) no seu arquivo .bashrc.

Aqui está como parece na prática:

insira a descrição da imagem aqui

  • Nota que estou usando o terminal GNOME dentro do Kali Linux para conectar ao Ubuntu Server e esta é a razão pela qual as cores são um pouco diferentes daquelas que serão produzidas pelo mesmo código no Ubuntu.

Referências:

informação relacionada