Eu acho que você configurou seu PS1
com cores, certo?
Certifique-se de ter \[
dentro da sua cota PS1
que precede seu conjunto de cores
Por exemplo:
PS1='\[\e[0;32m\u@\w/:\[\e[m '
Algo que eu notei no Ubuntu por um longo tempo que tem sido frustrante para mim é quando eu estou digitando um comando na linha de comando que fica mais longo (maior) que a largura do terminal, em vez de embrulhar para uma nova linha, volta para a coluna 1 na mesma linha e começa a gravar o início da minha linha de comando. (Na verdade, ele não sobrescreve o comando real, mas visualmente está sobrescrevendo o texto que foi exibido).
É difícil explicar sem ver, mas digamos que meu terminal tenha 20 caracteres de largura (o meu é mais parecido com 120 caracteres - mas por exemplo), e eu quero repetir o alfabeto Inglês. O que eu digito é isto:
echo abcdefghijklmnopqrstuvwxyz
Mas o que meu terminal parece antes de apertar a tecla é:
pqrstuvwxyzghijklmno
Quando eu clico em enter, echos
abcdefghijklmnopqrstuvwxyz
então eu sei que o comando foi recebido corretamente. Ele apenas envolveu minha digitação após o "o" e começou na mesma linha.
O que eu esperaria que acontecesse, se eu digitasse este comando em um terminal com apenas 20 caracteres de largura, seria este:
echo abcdefghijklmno
pqrstuvwxyz
Antecedentes: Estou usando o bash como meu shell e tenho esta linha em meu ~ / .bashrc:
set -o vi
para poder navegar na linha de comando com comandos VI. Atualmente, estou usando o servidor Ubuntu 10.10 e conectando-me ao servidor com o Putty.
Em qualquer outro ambiente em que trabalhei, se eu digitar uma longa linha de comando, ele adicionará uma nova linha abaixo da linha em que estou trabalhando quando meu comando ficar maior que a largura do terminal e quando eu continuar digitando eu posso ver meu comando em 2 linhas diferentes. Mas enquanto me lembro de usar o Ubuntu, meus comandos longos ocupam apenas uma linha.
Isso também acontece quando eu estou voltando aos comandos anteriores no histórico (eu apertei Esc, então 'K' para voltar aos comandos anteriores) - quando eu chego a um comando anterior que era maior que a largura do terminal, o a linha de comando fica desconfigurada e não posso dizer onde estou no comando.
A única solução alternativa que encontrei para ver todo o comando longo é pressionar "Esc-V", que abre o comando atual em um editor de VI.
Eu não acho que tenha algo estranho no meu arquivo .bashrc. Eu comentei a linha "set -o vi", e ainda tive o problema.
Baixei uma nova cópia do Putty e não fiz nenhuma alteração na configuração - acabei de digitar meu nome de host para me conectar, e ainda tenho o problema, então não acho que seja nada com Putty (a menos que Eu preciso fazer algumas alterações de configuração)
Alguém mais teve esse problema e alguém pode pensar em como corrigi-lo?
Editar
Era meu arquivo .bashrc. Eu copiei o mesmo perfil de máquina para máquina, e usei caracteres especiais no meu $ PS1 que de alguma forma o estão jogando fora. Agora estou seguindo as variáveis bash padrão para meu $ PS1.
Obrigado a @ ændrük pela dica no .bashrc!
... Fim da edição ...
Eu acho que você configurou seu PS1
com cores, certo?
Certifique-se de ter \[
dentro da sua cota PS1
que precede seu conjunto de cores
Por exemplo:
PS1='\[\e[0;32m\u@\w/:\[\e[m '
Certifique-se de que todos os bytes não imprimíveis em seu PS1 estejam contidos em \[ \]
. Caso contrário, o bash contará no comprimento do prompt. Ele usa o tamanho do prompt para determinar quando quebrar a linha.
Por exemplo, o bash conta o prompt com 19 colunas de largura, enquanto o prompt exibido pelo terminal tem apenas 10 colunas de largura ( My prompt
escrito em ciano e >
escrito em cor padrão):
PS1='\e[36mMy prompt\e[0m>' # bash count: 19, actual: 10
enquanto aqui, ele conta apenas o prompt com 10 colunas de largura, porque ignora os bytes entre as especiais \[
e \]
escapes:
PS1='\[\e[36m\]My prompt\[\e[0m\]>' # bash count: 10, actual: 10
Para uma boa prática, use tput
para gerar as fugas do terminal em vez de codificá-las:
cyan=$(tput setaf 6) # \e[36m
reset=$(tput sgr0) # \e[0m
PS1='\[$cyan\]My prompt\[$reset\]>'
Eu tive um problema semelhante e finalmente encontrei uma solução simples.
Adicione a seguinte linha no seu arquivo .bashrc
:
COLUMNS=250
Em seguida, digite source ~/.bashrc
para obter o efeito desejado.
Eu tive o mesmo problema com um prompt colorido personalizado, embora eu contivesse códigos de cores nos delimitadores \[
e \]
. Acontece que bash tem problemas em ecoar cores de dentro de uma função . Acabei de usar apenas variáveis para o meu prompt, e embora o meu .bashrc seja um pouco menos elegante, tudo funciona bem agora.
Uma coisa simples a fazer seria adicionar a seguinte linha antes de definir o PS1:
stty columns 1000
Por exemplo,
stty columns 1000
PS1='\[\e[0;32m\u@\w/:[\e[m '
mas isso afeta outros comandos unix como ls e man.
Eu tive esse problema quando conectado no tmux. O problema era que eu tinha uma sessão de ipython
em segundo plano ( ctrl + z
) e que de alguma forma quebrava quebra de linha. Assim que terminei ( fg
, ctrl+d+d
) meu terminal começou a funcionar corretamente
Portanto, verifique se há algum aviso interativo interrompido.
Tags command-line bash