Eu tenho 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 $
Atualmente, fica assim quando inicio o terminal:
O script deveria mostrar o nome do branch assim:
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_ps1
e 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 - . .profile
e ele deverá funcionar.
Além disso, aqui está um exemplo prático, onde o ~/.bashrc
arquivo padrão (prefiro editar este arquivo em vez de .profile
neste 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 .bashrc
sã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:
- 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:
- Pergunte ao Ubuntu:Script para exibir todas as cores do terminal
- Parede de código:Adicione o nome do branch git ao prompt do bash