Bash prompt não reconhecendo escape Unicode

5

Estou tentando personalizar meu prompt do Bash com caracteres Unicode e estou com um pouco de dificuldade. Se eu tentar incluir um caractere Unicode assim:

$ echo ☢ | hexdump -C
00000000  e2 98 a2 0a                                       |....|
00000004

$ PS1="\xe2\x98\xa2\x0a"

Eu vejo o meu prompt aparece assim:

\xe2\x98\xa2\x0a

... em vez de mostrar o caractere.. O que estou fazendo errado?

    
por Naftuli Kay 20.12.2012 / 23:16

2 respostas

9

Isso não é válido bash escape syntax para aspas duplas simples. Tente em vez disso

PS1=$'\xe2\x98\xa2 '

Isso usa o especial $'...' quoting que bash tem e que suporta escapes ANSI C. Note que o 0a é apenas linefeed (caractere de nova linha) e eu duvido que você queira isso, então eu tomei a liberdade de substituí-lo por um espaço acima.

É claro que, em vez de percorrer todo o rigamarole de encontrar a codificação UTF-8 e depois digitar as fugas, você poderia usar apenas o próprio caractere bruto ( PS1='☢ ' ) e ainda funcionaria.

    
por 20.12.2012 / 23:35
2

Com versões recentes do bash, você também pode usar o valor Unicode:

PS1=$'\u2622 '

Dessa forma, ele será expandido / exibido corretamente (ou pelo menos não tão ruim), mesmo que o charset / codificação local não seja utf-8 (ou causará o crash de bash ou a saída de lixo, como eu acho que descobriu um bug lá).

    
por 21.12.2012 / 02:52