#!/bin/bash # # myprompt - an ANSI based color terminal # multi-prompt function. # christopher barry - cbarry@mediaone.net # # make executable: chmod 755 myprompt # and put in in /usr/bin and then source # it and run it from your .bashrc file # in your home directory as follows: # # . /usr/bin/myprompt # myprompt [PROMPT_STYLE] # # color equivalences #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #Black 0;30 Dark Gray 1;30 #Blue 0;34 Light Blue 1;34 #Green 0;32 Light Green 1;32 #Cyan 0;36 Light Cyan 1;36 #Red 0;31 Light Red 1;31 #Purple 0;35 Light Purple 1;35 #Brown 0;33 Yellow 1;33 #Light Gray 0;37 White 1;37 # function myprompt { # set color names # normal local BK="\[\O33[0;30m\]" # black local BL="\[\033[0;34m\]" # blue local GR="\[\033[0;32m\]" # green local CY="\[\033[0;36m\]" # cyan local RD="\[\033[0;31m\]" # red local PL="\[\033[0;35m\]" # purple local BR="\[\033[0;33m\]" # brown local GY="\[\033[1;30m\]" # grey # enhanced local eGY="\[\033[0;37m\]" # light gray local eBL="\[\033[1;34m\]" # light blue local eGR="\[\033[1;32m\]" # light green local eCY="\[\033[1;36m\]" # light cyan local eRD="\[\033[1;31m\]" # light red local ePL="\[\033[1;35m\]" # light purple local eYW="\[\033[1;33m\]" # yellow local eWT="\[\033[1;37m\]" # white # reset to teminal default local NRML="\[\033[0;0m\]" # normal term color # what user am i? local me=`whoami` # setup user-based colors schemes. # play around in here for global settings # or create ~/.mprc for local override. case $me in root) # system god local UCHR="# " # root prompt character local UCLR=$eYW # root prompt color local NCLR=$PL # username color local ATCLR=$CY # @ sign color local HCLR=$eBL # host name color local BRKT=$eBL # bracket color local PARN=$CY # parens color local DCLR=$CY # dash color local SCLR=$CY # slash color local TCLR=$eBL # time color local COCLR=$BL # colon color local DTCLR=$eBL # date color local DIR=$eCY # current directory color local TXT=$NRML # root text color local CCHR="->" # line continuation character local CCLR=$GY # line continuation character color ;; *) # mere mortals local UCHR=":: " # user prompt character local UCLR=$eBL # user prompt color local NCLR=$eBL # username color local ATCLR=$CY # @ sign color local HCLR=$eBL # host name color local BRKT=$eBL # bracket color local PARN=$CY # parens color local DCLR=$CY # dash color local SCLR=$CY # slash color local TCLR=$eBL # time color local COCLR=$BL # colon color local DTCLR=$eBL # date color local DIR=$CY # current directory color local TXT=$CY # user text color local CCHR="-> " # line continuation character local CCLR=$GY # line continuation character color ;; esac # whew! finally, the prompts! local PROMPT_STYLE=$1 case $PROMPT_STYLE in vms) # looks like: [/usr/src/linux]# PS1="$BRKT[$DIR\$(getPWD)$BRKT]$UCLR$UCHR$TXT" PS2="$CCLR$CCHR$TXT" ;; giles) # named after Giles Orr - bash prompt god. # looks like: (root@host.company.com)-(12:34 PM / Mon Nov 27) # [/lib/modules]# PS1="$PARN($NCLR\u$ATCLR@$HCLR\H$PARN)$DCLR-$PARN($TCLR\$(date '+%I')$COCLR:$TCLR\$(date '+%M %p') $SCLR/ $DTCLR\d$PARN)\n$BRKT[$DIR\$(getPWD)$BRKT]$UCLR$UCHR$TXT" PS2="$CCLR$CCHR$TXT" ;; router) # just the specified prompt character and text color PS1="$UCLR$UCHR$TXT" PS2="" ;; -h | --help) echo echo myprompt: a multi-mode color prompt generator echo usage: [myprompt \| mp] [vms \| giles \| router \| -h \| --help] echo echo Source and call from .bashrc with parameters echo to modify the color and layout of the bash prompt. echo echo Or call without parameters to set the echo prompt to user@host:/directory$ echo ;; *) # generic # looks like: root@mybox:~# # with everything in the same user text color PS1="$TXT\u@\h:\$(getPWD)$UCHR" PS2="$CCHR" ;; esac } #alias function mp { myprompt $1 } function getPWD { # How many characters of the $PWD should be kept # courtesy Giles Orr's bash prompt HOWTO (tweaked to be a function) local pwd_length=40 if [ $(echo -n $PWD | wc -c | tr -d " ") -gt $pwd_length ] then newPWD=...$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/") else newPWD=$(echo -n $PWD) fi echo $newPWD }