Os comandos multi-linha estão confusos no meu PS1

0
declare __host='\[\e[30;102m\] \h \[\e[0m\]';
declare __dir='\[\e[1;97;44m\] \w \[\e[22m\]';
declare __arrow='\[\e[1m\]▸ \[\e[0m\]';

function __git_status() {
  local info;
  info=$(__git_info) && printf '\e[30;43m%s' "$info";
}

PS1="$__host$__dir"'$(__git_status)'"$__arrow ";

Quando eu vou executar comandos com várias linhas, eles retornam para a linha de partida. Tenho certeza que tem algo a ver com escapes no meu PS1. Eu tentei quase tudo o que posso pensar e acabei em nenhum lugar. Eu apreciaria toda e qualquer ajuda.

O objetivo é que a cor do plano de fundo da seta pegue a cor da seção anterior. Se eu estou em um repositório git, deve ser amarelo. Se eu não sou, deveria ser azul.

    
por Nxt3 09.08.2018 / 14:15

1 resposta

0

A solução foi mudar:

info=$(__git_info) && printf '\e[30;43m%s' "$info"

para

info=$(__git_info) && printf '\e[30;43m%s' "$info"

Isso ocorre porque o bash substitui internamente os caracteres especiais solicitados [e] por ASCII 1 e 2 antes que minha função __git_status seja executada.

    
por 09.08.2018 / 14:45