O terminal não fecha corretamente [fechado]

1

Estou usando o Gnome Terminal para conectar via SSH ao meu servidor. Minha conta no servidor remoto (que é o Ubuntu) usa o bash. Meu bashrc contém uma linha que define o prompt do shell para incluir meu branch git atual, se aplicável:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ ()/'
}
export PS1="\u@\h: \[3[32m\]\w\[3[00m\]\$(parse_git_branch)\$ "

Quando estou dentro de um repositório do git, meu terminal para de acondicionar corretamente. Comandos longos que devem ser agrupados na segunda linha, em vez disso, devem ser encapsulados no início da linha em que foram iniciados e começar a imprimir bem em cima do meu prompt.

Eu não tenho problemas de quebra automática, exceto quando meu diretório de trabalho está dentro de um repositório do git (ou seja, quando a saída de parse_git_branch não está vazia).

Eu sei que caracteres não imprimíveis deve estar entre \[ e \] , de modo que o shell (ou terminal?) saiba não contá-los em relação ao tamanho do prompt. Estou bastante confiante de que a linha "export" fez corretamente isso ... mas minha regex-fu não é strong o suficiente para entender o que o comando sed está fazendo, e acho que não está inserindo corretamente os caracteres não imprimíveis .

Esta questão é extremamente semelhante (e até usa o mesmo parse_git_branch function, que obtivemos de aqui ), mas o outra questão envolvia ter um emoji no prompt, o que não é o caso para mim.

Alguém sabe o que há de errado com o meu prompt?

    
por Woodrow Barlow 06.07.2016 / 17:42

2 respostas

3

Isso aconteceu porque eu tinha ativado a opção ui color=always no git, não diretamente por causa do prompt do shell ou da função parse_git_branch . O comando "git branch" estava exibindo com cores, mas o autor original da função parse_git_branch não levou em conta isso e cortou a string de tal forma que os códigos de cores não foram fechados corretamente.

Adicionar o --no-color ao comando "git branch" dentro da função parse_git_branch foi o suficiente para corrigir o problema, mas eu realmente me acostumei com as cores - então aqui está como replicar o fundo dourado :

parse_git_branch() {
     git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ ()/'
}
export PS1="\u@\h: \[3[32m\]\w\[3[00m\]\[3[7m3[33m\]\$(parse_git_branch)\[3[00m\]$     "
    
por 06.07.2016 / 18:37
1

Quando você instala o pacote git. Ele deve instalar um arquivo local que você pode usar com a análise de ramificação integrada. Você já tentou usá-lo? Eu uso isso sem problemas. Isto é retirado do RHEL, então o git-prompt.sh pode estar em um local diferente no Ubuntu. Basta fazer um "locate git-prompt.sh", alternativamente parece que uma versão está disponível aqui: link

. /usr/share/git-core/contrib/completion/git-prompt.sh
export PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
    
por 06.07.2016 / 18:11