Alterar a cor de uma letra específica no nome de usuário no PS1 do bash

9

Quero mudar a cor de uma letra específica no meu nome de usuário que está sendo exibido pelo PS1 no bash.

Por exemplo: se \ufor rahul, eu gostaria que a letra hfosse azul e o resto fosse branco.

Eu sei que \use refere ao usuário e adicionando uma cor a toda uma 'entidade' é feito através da adição de tags como: [\033[38;5;15m\].

Se for possível, posso saber como fazer o mesmo.

Rahul Bharadwaj
fonte

Respostas:

13

Se você não se importa de não usar a \ufuga, pode fazê-lo assim:

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

Isso definirá o prompt apenas para o nome de usuário e um espaço. O primeiro caractere do nome de usuário será vermelho. Isso funciona expandindo a $USERvariável duas vezes com um intervalo específico. Na primeira vez em que o intervalo é de 0 a 1. Na segunda vez, é de 1 (o segundo caractere) até o final.

Para obter o prompt como você solicitou, use este:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "
Sebastian Stark
fonte
11
Você pode simplesmente omitir o comprimento para imprimir a sequência inteira, começando com deslocamento : ${USER:1}para todo o nome de usuário, exceto o primeiro caractere. Ótima solução! Você também pode mostrar como alterar a cor do terceiro caractere, conforme solicitado pelo OP?
dessert
11
Um pode testar coisas assim com echo -e, por exemploecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
sobremesa
2
Isso tem que funcionar com vários nomes de usuário diferentes (por exemplo, destaque a terceira letra para todos)? Se for apenas para você, uma abordagem mais simples é apenas codificar as letras do seu nome de usuário, por exemplo, em ravez de ${USER:0:2}etc.
egmont
A codificação @egmont quase nunca é a melhor maneira, mas é muito mais simples. Dessa forma, você pode soltar o código em um arquivo de configuração global ou compartilhá-lo com outras pessoas. E lida com o caso quando sua conta é renomeada.
Sebastian Stark
11
Pessoalmente, compartilho minha própria configuração de shell entre três contas com nomes diferentes. Mas talvez não devemos entrar em filosofia aqui :)
Sebastian Stark