Meu prompt do bash, que admito ter roubado de alguns lugares e remendado, às vezes adiciona parte dos comandos anteriores ao seu comprimento ao rolar o histórico do bash com as setas para cima/para baixo.
Por exemplo, se meus comandos anteriores fossem:
ls
cd /home/caleb
vim .bashrc
Quando eu estava no meu prompt e rolei para cima duas vezes, poderia parecer:
$ vim.bcd /home/caleb
Onde os primeiros cinco caracteres sobraram do último comando.
Alguém tem alguma ideia de por que isso está acontecendo e como pode ser interrompido?
Meu prompt está definido com este código (muito longo para incluir aqui):https://gist.github.com/1679352
Responder1
Em algum lugar seu prompt é fubar. O que geralmente acontece é que seu shell pensa que está gerando códigos de termos não imprimíveis e esperando que ocupem espaço. O melhor conselho que posso dar é adicionar (ou retirar) sistematicamente seu prompt até que esse comportamento pare para isolar o código que está causando o problema.
Responder2
Os códigos de cores precisam ser colocados entre colchetes. Os colchetes informam ao bash que o texto incluído não deve ser impresso
com base no exemplo do @Pheditor, isso mostra que qualquer formatação feita após a nova linha resultará no problema original:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\033[0;90m\$ "
agrupar o código de formato em [] garante que um comportamento irritante nunca aconteça:
export PS1="\n\[\[\033[01;33m\][\w]\[\033[00m\]\n\[\033[0;90m\]\$ "
A documentação:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/nonprintingchars.html
Como a formatação PS1 faz com que o valor seja muito longo e difícil de ler, coloquei os códigos de formato em variáveis:
BYELLOW='\[\033[01;33m\]'
IBLACK='\[\033[0;90m\]'
PS_CLEAR='\[\033[0m\]'
export PS1="\n${BYELLOW}[\w]${PS_CLEAR}\n${IBLACK}\$ "
Responder3
Eu tive o mesmo problema e estava relacionado às definições de cores.
No meu caso, tenho um prompt de várias linhas (dá mais espaço para o comando atual, independentemente do comprimento do caminho exibido pelo prompt).
Versão ruim:
export PS1="\n\n\[\033[01;33m[\w]\n\033[00m\$ "
Boa versão:
export PS1="\n\n\[\033[01;33m[\w]\033[00m\n\$ "
\033[00m
termina a cor. Se estiver após a nova linha ( \n
), impede o redesenho adequado no terminal, para sobrescrever os comandos anteriores com a cor de fundo. Movê-lo para trás da nova linha resolveu o problema.
(usando Terminal no Mac OS 10.8)
Responder4
Eu estava com esse problema. O que eu detectei?
Quando você tem cores dentro da variável PS1 (ex: "\e[35m" ) ela SEMPRE deve estar rodeada por "\[" e "\]" (ex: "\[\e[35m\]" ).
Quando marquei todas as cores no PS1 de acordo com esta regra, funcionou!
Não há mais problemas com a rolagem do histórico do bash.
MAU EXEMPLO:PS1="\e[0;36m[\u@\h[\e[1;31m$ORACLESID\e[0;36m] \W]\e[0m"; exportar PS1
BOM EXEMPLO:PS1="\[\e[0;36m\][\u@\h[\[\e[1;31m\]$ORACLESID\[\e[0;36m\]]\W]\[\e [0m\]"; exportar PS1