Colored bash prompt


Perhaps you use a simple terminal like xterm, aterm, eterm, or some a bit more sophisticated lije konsole o gnome-terminal. In such case, maybe this article isn’t for you… but maybe you use a most avanced and featured-rich terminal like yakuake, guake or terminator, or you are used to gentoo’s bash colors like me. Then you will find default’s arch linux bash prompt is quite ugly and hard to recognize who are you in a given time or which of those hundred files are executables or directories or hard/soft links only with a glance.

You can then, edit your .bashrc or even better, edit /etc/bash.bashrc and replace (if you never modified it) its content with the original and unmodified Gentoo’s bashrc

# /etc/bash.bashrc
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output. So make sure this doesn't display
# anything or bad things will happen !

# Test for an interactive shell. There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.

if [[ $- != *i* ]] ; then
# Shell is non-interactive. Be done now!

# Bash won't get SIGWINCH if another process is in the foreground.
# Enable checkwinsize so that bash will check the terminal size when
# it regains control. #65623
# (E11)
shopt -s checkwinsize

# Enable history appending instead of overwriting. #139609
shopt -s histappend

# Change the window title of X terminals
case ${TERM} in
PROMPT_COMMAND='echo -ne "33]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}07"'
PROMPT_COMMAND='echo -ne "33_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}33\\"'


# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS. Try to use the external file
# first to take advantage of user additions. Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM
[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(/dev/null \
&& match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true

if ${use_color} ; then
# Enable colors for ls, etc. Prefer ~/.dir_colors #64489
if type -P dircolors >/dev/null ; then
if [[ -f ~/.dir_colors ]] ; then
eval $(dircolors -b ~/.dir_colors)
elif [[ -f /etc/DIR_COLORS ]] ; then
eval $(dircolors -b /etc/DIR_COLORS)

if [[ ${EUID} == 0 ]] ; then
PS1='\[33[01;31m\]\h\[33[01;34m\] \W \$\[33[00m\] '
PS1='\[33[01;32m\]\u@\h\[33[01;34m\] \w \$\[33[00m\] '

alias ls='ls --color=auto'
alias grep='grep --colour=auto'
if [[ ${EUID} == 0 ]] ; then
# show root@ when we do not have colors
PS1='\u@\h \W \$ '
PS1='\u@\h \w \$ '

# Try to keep environment pollution down, EPA loves us.
unset use_color safe_term match_lhs


2 thoughts on “Colored bash prompt

    • malevolent

      Hi there!

      Sorry for the late answer.

      The .bashrc I’ve posted only has 78 lines, so there is no line 113.
      Could you make a backup of your actual .bashrc and try only this one?
      If works, that it should, then pastebin your .bashrc to let me take a look.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s