Por que meu aviso personalizado do bash falha ao navegar pelo histórico [duplicado]

0

Eu configurei um prompt bash personalizado para que eu possa ver coisas como a ramificação atual do git, a informação da versão do pacote npm, o env virtual em que estou, etc. No entanto, quando pressiono a tecla de seta para cima para navegar no histórico , as falhas de prompt:

Veja o que é normalmente:

Noentanto,quandoeunavegonohistórico,oespaçoentreosinallambdaeocomandodesaparece:

Aconteceapenasalgumasvezesenãoseiporquê.Euachoqueestouapenassendoexigentesobreumpequenoespaço,masdepoisdepassarmuitotempoconfigurandoomeupromptbasheuqueroqueelepareçaperfeito.

Istoéoquemeu.bashrcparece.EstouusandooGitBashparaWindows,btw,seissofazdiferença:

bashPrompt(){SYMBOL="λ"

COUNT=('find ./ -maxdepth 1 -name "package.json"')

if [ ${#COUNT[@]} -gt 0 ]; then
    NPM_PACKAGE_INFO="($(node -p -e "require('./package.json').version"))"
else
    NPM_PACKAGE_INFO=""
fi

if [ ! -z "$CONDA_DEFAULT_ENV" ]; then
    ENV=" ($CONDA_DEFAULT_ENV)"
else
    ENV=""
fi

if [ -d .git ]; then
    if [ -z "$(git status --porcelain)" ]; then 
        echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
    else 
        echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;33;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
    fi
else
    echo "[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "
fi;

}

PROMPT_COMMAND = 'PS1="$ (bashPrompt)"'

    
por Yash Patel 23.11.2018 / 20:00

1 resposta

0

Uma das suas strings diz:

"[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\]\n\[\e[0;37;40m${SYMBOL}\] "

Em que você está colocando todo texto dentro de \[\] pares. Se você remover a nova linha \n e tentar essa PS1:

PS1="[\[\e[0;36;40m\u@\H\]\[\e[0;37;40m]\]\[\e[1;34;40m${ENV}\] \[\e[1;31;40m\w\]\[\e[1;32;40m$(__git_ps1)\] \[\e[0;37;40m${NPM_PACKAGE_INFO}\] n\[\e[0;37;40m${SYMBOL}\] "

Você descobrirá que a maior parte da solicitação será substituída pelos comandos de histórico se você pressionar a seta para cima.

Basta colocar o texto que deve usar o espaço de linha entre esses colchetes:

PS1="[\[\e[0;36;40m\]\u@\H \[\e[0;37;40m]\]\[\e[1;34;40m\]${ENV} \[\e[1;31;40m\]\w\[\e[1;32;40m\]$(__git_ps1) \[\e[0;37;40m\]${NPM_PACKAGE_INFO} n\[\e[0;37;40m\]${SYMBOL} "

E tente novamente.

Depois que isso funcionar corretamente, adicione a nova linha \n de volta e tente novamente.

Se ainda estiver com problemas, atualize o bash para o 4.4.18 (presente criado) ou similar.

    
por 25.11.2018 / 00:31

Tags