O nome da ramificação do Git no shell bash não desaparece em diretórios não git

0

Estou usando o este guia para adicionar o nome da ramificação do git para a variável PS1. Eu mudei um pouco, para deixar o meu tema de prompt atual e adicionar um fundo verde para definir o nome da ramificação.

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

export PS1="$PS1\e[30;48;5;82m$(parse_git_branch)\e[0m \[3[00m\]"

Parece que tudo funciona, mas quando saio do diretório, o nome da ramificação git permanece. E se eu rodar terminal no diretório não git, e cd no git, não consigo ver o nome do branch. Mas quando eu abro outra guia de terminal, vejo isso.

Eu uso o terminal Guake com o shell Bash.

    
por OccamRazor 27.10.2016 / 13:15

2 respostas

3

Isso está acontecendo porque seu prompt está sendo configurado para o valor de parse_git_branch quando o prompt está configurado, você precisa dele para executar a função toda vez que for executado.

Você precisa colocar um \ antes do $(parse_git_branch) para que o dólar fique oculto quando o prompt for definido, para que não seja executado. Quando o prompt for executado, o dólar ficará visível e o comando entre parênteses será executado, mostrando o valor correto para a pasta em que você está.

export PS1="$PS1\e[30;48;5;82m\$(parse_git_branch)\e[0m \[3[00m\]"

Isso é explicado nos documentos bash do segundo parágrafo desta página link

Outro truque útil aqui é executar /bin/bash -x e tentar, isso mostra muito mais do que está acontecendo.

    
por Amias 27.10.2016 / 13:57
1

Suponho que você tenha adicionado a seção de código ao seu ~/.bashrc . Isso significa que a variável PS1 é definida apenas uma vez e, em seguida, não altera o valor quando você altera os diretórios. Para que isso funcione, o valor de PS1 precisa ser reavaliado após cada cd .

Uma maneira de resolver isso é definir PROMPT_COMMAND para uma função que redefina PS1 . O valor de PROMPT_COMMAND é avaliado antes de cada prompt do bash (consulte man bash ).

No entanto, uma maneira mais fácil é instalar o liquidprompt , que faz o que você quer, e muito mais.

sudo apt-get install liquidprompt && liquidprompt_activate

Você pode configurar seu prompt dinâmico para o conteúdo do seu coração.

    
por zwets 27.10.2016 / 13:56