9

I want to change the colour of a specific letter in my username being displayed by PS1 in bash.

Eg: If my \u is rahul, I would like the letter h to be in blue colour and rest to be white.

I do know that \u refers to username and adding a colour to an entire 'entity' is done by adding tags like: [\033[38;5;15m\].

If it's possible, can I please know how to do the same.

dessert
  • 39,392
  • 12
  • 115
  • 163
Rahul Bharadwaj
  • 193
  • 2
  • 7

1 Answers1

13

If you do not mind not using the \u escape, you could do it like this:

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

This will set the prompt to just the username and a space. The first character of the username will be red. This works by expanding the $USER variable twice with a specific range. The first time the range is just from 0 to 1. The second time it is from 1 (the second character) to the end.

To get the prompt like you requested use this:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "
Sebastian Stark
  • 6,052
  • 17
  • 47
  • 1
    You can just omit *length* to print the whole string beginning with *offset*: `${USER:1}` for the whole username except the first character. Nice solution! Can you also show how to change the third character's color, as OP requested? – dessert Mar 14 '18 at 13:05
  • 1
    One can test things like that with `echo -e`, e.g. `echo -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "` – dessert Mar 14 '18 at 13:09
  • 2
    Does this have to work with various different usernames (e.g. highlight the 3rd letter for everyone)? If it's just for you, a simpler approach is just to hardcode the letters of your username, e.g. `ra` instead of `${USER:0:2}`, etc. – egmont Mar 14 '18 at 20:51
  • @egmont hardcoding is almost never the best way, but admittedly much simpler often. This way you can drop the code in a global config file or share it with others. And it handles the case when your account is renamed. – Sebastian Stark Mar 14 '18 at 20:55
  • Usernames don't change that often, and this question sounds to me more likely to be OP's personal preference rather than something to be shared across users. Both approaches indeed have pros and cons, let OP choose one :) – egmont Mar 14 '18 at 20:57
  • 1
    Personally I share my own shell config between three differently named accounts. But maybe we should not get into philosophy here :) – Sebastian Stark Mar 14 '18 at 21:04