The following is what Gentoo sets its bash prompt:
if [ `/usr/bin/whoami` = 'root' ]
then
if [ "$SHELL" = '/bin/bash' ] || [ "$SHELL" = '/bin/sh' ]
then
export PS1='\[\033[01;31m\]\h \[\033[01;34m\]\W \$ \[\033[00m\]'
fi
else
if [ "$SHELL" = '/bin/bash' ] || [ "$SHELL" = '/bin/sh' ]
then
export PS1='\[\033[01;32m\]\u@\h \[\033[01;34m\]\W \$ \[\033[00m\]'
fi
fi
One can read the manpage of bash to see what the \u
, \h
and \W
means. Most
of the things on the setting of PS1
is to turn on the color, for example, when
you are root
, the hostname shall be in red but a normal user should see it
green. The number 01;32
is what means green and it is the ANSI code for
controlling that. (I miss the time when everyone is using 16-color EGA
display!).
We can even control the title of xterm using similar tricks, see the code snippet I put below:
export PS1='\[\e]2;\u@\h \W\a\e[32m\]\u@\h \[\e[34m\]\W \$ \[\e[0m\]'
##################################################
# ANSI codes
##################################################
# Begin of control characters \[
# End of control characters \]
# XTerm titlebar text \e]2;<text>\a
# Reset color to the default \e[0m
# Foreground + Background \e[<fg>;<bg>m
# Foreground w/o background \e[<fg>m
# Background: Black 40
# Background: Red 41
# Background: Green 42
# Background: Brown 43
# Background: Blue 44
# Background: Purple 45
# Background: Cyan 46
# Background: Grey 47
# Foreground: Black 0;30 Grey 1;30
# Foreground: Lt Red 0;31 Red 1;31
# Foreground: Lt Green 0;32 Green 1;32
# Foreground: Lt Brown 0;33 Yellow 1;33
# Foreground: Lt Blue 0;34 Blue 1;34
# Foreground: Lt Purple 0;35 Purple 1;35
# Foreground: Lt Cyan 0;36 Cyan 1;36
# Foreground: Lt Grey 0;37 White 1;37
One thing to note: All the ANSI code for controlling colors (i.e. non-printing
stuff) must be escaped by a pair of \[
and \]
, otherwise your bash
prompt will be broken when wrapping a very long command line.