Muestre la rama Git entre paréntesis dentro de la terminal de Ubuntu usando un script .profile personalizado

Muestre la rama Git entre paréntesis dentro de la terminal de Ubuntu usando un script .profile personalizado

Tengo 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 $

Actualmente, se ve así cuando inicio la terminal:

ingrese la descripción de la imagen aquí

Se suponía que el script mostraría el nombre de la rama así:

ingrese la descripción de la imagen aquí

Ignore la discrepancia en los nombres de los directorios.

¿Qué estoy haciendo mal?

Respuesta1

El problema en su código está en la línea 18:

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

Aquí estás usando la sustitución de comandos (estilo antiguo con comillas invertidas) donde llamas a la función __git_ps1y debería ser reemplazada por su salida, pero no puedo ver la definición de la función en tu código de ejemplo. Entonces creo que puedes agregar la siguiente definición de función en algún lugar antes de esa línea:

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

Luego guarde y obtenga el archivo de perfil . .profile, y debería funcionar.


Además, aquí hay un ejemplo práctico, donde el ~/.bashrcarchivo predeterminado (prefiero editar este archivo en lugar de .profileen este caso) de Ubuntu Server 22.04 se cambia para lograr casi el mismo aspecto que desea. Tenga en cuenta que aquí estoy usando la nueva sintaxis de sustitución de comandos $(). Y la función parse_git_branch()se define antes de su llamada.

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

.bashrcSólo se muestran las líneas relevantes de . Para el estado predeterminado, busque la declaración if [ "$color_prompt" = yes ];(alrededor de la línea 70) en su archivo .bashrc.

Así es como se ve en la práctica:

ingrese la descripción de la imagen aquí

  • Tenga en cuenta que estoy usando la terminal GNOME dentro de Kali Linux para conectarme al servidor Ubuntu y esta es la razón por la cual los colores son ligeramente diferentes de los que se producirán con el mismo código en Ubuntu.

Referencias:

información relacionada