Your Bash prompt is stored in the
PS1 variable. In my prompt, I display the following items, colour coded where appropriate:
- time (
\t) - user (
\u) - red if a production user, green otherwise - host (
\H) - red if a production machine, green otherwise - working directory (
_get_path) - trimmed to 80 characters - number of jobs currently running in the shell (
\j) - history number of this command (
\!) - exit status of the previous command (
_get_exit_status) - green if success, red otherwise
title which allows me change my xterm's titlebar so that I can differentiate it from other xterm's.
Update: My dotfiles are now in Git. For the latest version, please visit my GitHub dotfiles repository.
Here is my prompt taken from~/.bash_prompt.
# define some colours
GREY=$'\033[1;30m'
RED=$'\033[1;31m'
GREEN=$'\033[1;32m'
YELLOW=$'\033[1;33m'
BLUE=$'\033[1;34m'
MAGENTA=$'\033[1;35m'
CYAN=$'\033[1;36m'
WHITE=$'\033[1;37m'
NONE=$'\033[m'
# trims long paths down to 80 chars
_get_path(){
local x=$(pwd | sed -e "s:$HOME:~:")
local len=${#x}
local max=80
if [ $len -gt $max ]
then
echo ...${x:((len-max+3))}
else
echo ${x}
fi
}
# prints a colour coded exit status
_get_exit_status(){
local es=$?
if [ $es -eq 0 ]
then
echo -e "${GREEN}${es}"
else
echo -e "${RED}${es}"
fi
}
# change xterm title
title() {
if [ $# -eq 0 ]
then
title=""
else
title="$* - "
fi
}
# colour the host red if it is production
# all prod hostnames end with "prod"
if [[ $HOSTNAME =~ prod$ ]]
then
HOST_COLOR=$RED
else
HOST_COLOR=$GREEN
fi
# colour the user red if it is production
# all prod usernames end with "prod"
if [[ $USER =~ prod$ ]]
then
USER_COLOR=$RED
else
USER_COLOR=$GREEN
fi
#executed just before prompt
PROMPT_COMMAND='exitStatus=$(_get_exit_status);mydir=$(_get_path);'
PS1='\033]0;${title}\u@\h:`tty`>${mydir}\007\n\
\[${GREY}\][\[${BLUE}\]\t\[${GREY}\]]\
\[${GREY}\][\[${USER_COLOR}\]\u\[${GREY}\]@\[${HOST_COLOR}\]\H\[${GREY}\]] \
\[${WHITE}\]${mydir} \
\[${GREY}\](\
\[${YELLOW}\]+${SHLVL}\[${GREY}\]|\
\[${YELLOW}\]%\j\[${GREY}\]|\
\[${YELLOW}\]!\!\[${GREY}\]|\
\[${YELLOW}\]${exitStatus}\[${GREY}\])\[${NONE}\]\n\
\[${USER_COLOR}\]$\[${NONE}\] '
# continuation prompt
PS2='\[${USER_COLOR}\]>\[${NONE}\] '
#used by set -x for tracing
PS4='\[${USER_COLOR}\]+\[${NONE}\] '
References:More posts on my Bash profile:

Excellent! The one thing I think is missing is the running time of the last command.
ReplyDeleteLatest version of https://github.com/xeor/ninjab supports running time of last command. Use it like it is or rip it out from https://github.com/xeor/ninjab/blob/master/parts/4_prompt :)
ReplyDelete