como colocar variáveis de cor no bash $ '…'

1

Eu defini em um arquivo que eu compro de .bashrc , constantes de cores ... como estas ...

txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple

Quando tento usá-los na minha variável $ PS1, estou obtendo resultados estranhos, em que tudo parece bem, até que eu pressione CTRL-R para a busca recursiva do histórico, quando poucos personagens estão no início, então eu posso, por exemplo, excluí-los pressionando CTRL-D no shell por trás disso - > ponteiro:

Estou usando a notação $'..' para poder inserir caracteres unicode.

PS1=$'\xE2\x99\x94 [\t][\u]->'  

agora, qual é a maneira correta de inserir variáveis como $txtblu acima, em PS1 line ..?

EDITAR:

então linha como esta:

PS1=$'\n\W\xe2\x98\x85 '$txtpur'\n\n[\t]'$txtrst'[\u]->'

torna a renderização de símbolos e cores ok, mas quando pressiono Ctrl + R , digite alguns caracteres e, em seguida, Ctrl + B poucos (2 deles eu acho) caracteres aparecem no início da pesquisa de comandos resultante que não pertencem a essa linha do histórico, e eu posso deletá-los.

    
por branquito 11.02.2014 / 03:18

2 respostas

0

Ao usar caracteres não imprimíveis no PS1, é necessário agrupá-los em \[ e \] . Em seu exemplo assim:

PS1=$'\n\W\xe2\x98\x85 \['$txtpur'\]\n\n[\t]\['$txtrst'\][\u]->'

Explicação: Para agrupar comandos longos corretamente, o bash calcula o tamanho do prompt. No entanto, quando a variável PS1 contém caracteres não imprimíveis, o comprimento é calculado incorretamente. Use \[ e \] para indicar "tudo isso tem um comprimento de 0".

link

    
por 12.02.2014 / 09:53
1

Primeiro, você precisa de uma linha extra no arquivo de cores que define o STOP , uma maneira de redefinir as cores de volta ao padrão:

txstop='\e[0m' # reset 

Isso será necessário para redefinir as cores após cada mudança de cor, caso contrário, tudo que você digitar será colorido. Agora, a outra questão é que as variáveis bash precisam estar entre aspas duplas ou não serão expandidas. Como você está usando a sintaxe $' ' , isso exigirá algumas acrobacias de aspas. Por exemplo:

PS1=$'\xE2\x99\x94'"$txtblu[\t]$txstop $txtgrn[\u]$txstop$txtpur->$txstop"  

Parece-se com isto:

    
por 11.02.2014 / 04:03

Tags