Como personalizar o PS1 corretamente?

6

Eu personalizei meu bash com isso no meu bashrc

export PS1="\e[0;36m\h\e[m \e[0;33m\w/\e[m \e[0;31m\n\$ →\e[m  "

Então eu recebo algo assim (com cores):

Ahuri ~/Public/ 
$ →  

Mas estou tendo problemas com comandos longos. Quando eu escrevo um comando muito longo que é mais longo do que uma linha, ele começa a sobrescrever minha primeira linha

Exemplo:

Ahuri ~/Public/ 
$ → ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Se eu continuar adicionando "^", obtenho:

Ahuri ~/Public/ 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

meu "$ →" é sobrescrito e, em seguida, toda a linha é sobrescrita.

    
por Ahuri3 03.04.2013 / 14:11

3 respostas

8

Não há problema com o \n . Este é mais uma vez o antigo problema de tamanho da seqüência de escape: \e[0m e similar não contribuem para o tamanho real do prompt, então você deve colocá-los em \[ .. \] para indicar isso ao intérprete:

PS1="\[\e[0;36m\]\h\[\e[m\] \[\e[0;33m\]\w/\[\e[m\]\n \[\e[0;31m\]\$ →\[\e[m\]  "
    
por 03.04.2013 / 14:25
0

Use $PROMPT_COMMAND para exibir a linha adicional para que você não tenha \n em $PS1 .

    
por 03.04.2013 / 14:14
0

Uma opção mais simples é usar as sequências tput :

export PS1='\[$(tput setaf 4)\]\h\[$(tput sgr0)\] \[$(tput setaf 3)\]\w/\[$(tput sgr0)\]\n\[$(tput setaf 1)\]\$ →\[$(tput sgr0)\] '
    
por 03.04.2013 / 14:36

Tags