Tengo este .profile
script 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:
Se suponía que el script mostraría el nombre de la rama así:
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_ps1
y 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 ~/.bashrc
archivo predeterminado (prefiero editar este archivo en lugar de .profile
en 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
.bashrc
Só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:
- 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:
- Pregúntale a Ubuntu:Script para mostrar todos los colores del terminal
- Muro de códigos:Agregue el nombre de la rama git al indicador de bash