Corrigir erros de exibição de quebra de linha e backspace do bash no Mac OS X?


14

Quando abro o Terminal (no Mac OS X 10.5.8) e digite uma longa linha de comando: texto alternativo

... o texto não passa para a próxima linha quando envolve: texto alternativo texto alternativo

Além disso, às vezes, quando digito um comando e depois retrocesso (ou seta para cima ou ^ U): texto alternativo

... a linha inteira não é apagada e não posso retroceder além de um certo ponto: texto alternativo texto alternativo

Este é um erro conhecido do bash (no Mac OS X)? Existe uma correção?

Atualização: Juliano estava correto, o problema foi causado pela delimitação incorreta de uma sequência de códigos do console na minha variável PS1. Alterando:

export PS1='\[\033[1;34m\]\$\]\033[0m\] '

... no meu .bashrcpara:

export PS1='\[\033[1;34m\]\$\[\033[0m\] '

...resolveu o problema.


1
+1 nas capturas de tela mais bonitas de uma tela de terminal que eu já vi.
Pausado até novo aviso.

1
as duas linhas de código que você mostrou na atualização são idênticas.
Magne

Boa captura, @Magne. Faz quatro anos desde que olhei para isso, então não me lembro especificamente, mas presumo que o "antes" estava ausente \].
Daryl Spitzer

eles não são idênticos: o primeiro tem em \]vez de '[`
Ohad Cohen

Respostas:


19

O comportamento é consistente em ter códigos de console em seu prompt (para alterar a cor etc.) e não marcar adequadamente para que o bash saiba que eles são invisíveis.

Antes de mais nada, faça o seguinte:

PS1='\w\$ '

E então tente novamente. Se o problema for resolvido, então minhas suspeitas estão corretas.

Cada sequência de código do console deve ser delimitada com \[e \]na variável PS1. Eles dizem ao bash que o que estiver lá dentro não move a posição do cursor. Leia o manual do bash para mais informações.


Esse foi o problema. Obrigado! Vou atualizar minha pergunta com detalhes.
Daryl Spitzer

E se não resolver o problema?
Levesque 22/03

3

Para ajudar a gerar um prompt limpo, tente http://www.kirsle.net/wizards/ps1.html , é bastante impressionante. Apenas tenha cuidado com os colchetes em seu prompt, ele tenta escapar deles ou algo assim.


+1 Embora a resposta de @ Juliano seja tecnicamente correta, este link aqui é o que define os tputcomandos corretos - que corrigiu nova linha, `` nova linha e outras correções de "histórico + retrocesso" que não poderiam ser corrigidas por outros códigos ANSI.
Eric Duncan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.