O prompt de comando acabou de ser escrito por comandos anteriores!

2

Meu sistema tem o Ubuntu Server 12.04 instalado no modo de texto (sem X-Window) e um prompt de comando que está definido no meu arquivo ~/.bashrc seguindo a linha:

    PS1='${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\w \[3[01;35m\] \[$(date "+%a %F %T %Z")\] \[3[00m\]$ '  

Parece:

username@hostname:~  Wed Jul 2015-07-22 18:00:12 JST $ 

Se eu pressionar , o comando anterior do meu histórico será exibido na frente da promp acima, por exemplo:

username@hostname:~  Wed Jul 2015-07-22 18:00:12 JST $ vim /home/username/~/.bshrc

Se eu pressionar segunda vez, o comando anterior no histórico é exibido, mas está escrito em alguma parte do meu prompt, ou seja:

username@hostname:~  Wedsudo su

Observe que Jul 2015-07-22 18:00:12 JST $ acabou de ser escrito!

  • Além disso, nem sempre é escrito por segundo comando no histórico. Algum tempo primeiro, segundo, terceiro comandos anteriores são exibidos corretamente na frente do prompt completo, um após o outro, e repentinamente o comando anterior é escrito na última parte do prompt de comando!

  • Sempre, a última parte do prompt de comando é escrita após dia da semana , ou seja, Wed e esta posição é fixa se eu pressionar ou .

  • Se eu executar o comando ou pressionar Ctrl + C , o prompt de comando será exibido completamente de novo.

Qualquer um pode ajudar a resolver este problema?

    
por PHP Learner 22.07.2015 / 06:54

1 resposta

8

Isso falha porque você incluiu $(date ...) em \[ e \] . Remova-os e isso deve funcionar como esperado.

\[ ... \] , no prompt, é usado para informar ao bash que os caracteres dentro não serão adicionados ao tamanho do prompt. Você precisa deste terminal ao redor como escape 3[01;32m , porque isso torna o texto a seguir uma cor diferente, mas esses 8 bytes não serão adicionados ao tamanho do prompt; eles são comidos pelo terminal.

Em uma nota lateral; O bash já pode colocar a data no prompt para você, sem ter que executar o comando date .

PS1='... \D{%a %F %T %Z} ...'

Veja o link

    
por geirha 22.07.2015 / 08:08