# Normal Colors Black='\e[0;30m' # Black Red='\e[0;31m' # Red Green='\e[0;32m' # Green Yellow='\e[0;33m' # Yellow Blue='\e[0;34m' # Blue Purple='\e[0;35m' # Purple Cyan='\e[0;36m' # Cyan White='\e[0;37m' # White # Bold BBlack='\e[1;30m' # Black BRed='\e[1;31m' # Red BGreen='\e[1;32m' # Green BYellow='\e[1;33m' # Yellow BBlue='\e[1;34m' # Blue BPurple='\e[1;35m' # Purple BCyan='\e[1;36m' # Cyan BWhite='\e[1;37m' # White # Background On_Black='\e[40m' # Black On_Red='\e[41m' # Red On_Green='\e[42m' # Green On_Yellow='\e[43m' # Yellow On_Blue='\e[44m' # Blue On_Purple='\e[45m' # Purple On_Cyan='\e[46m' # Cyan On_White='\e[47m' # White NC="\e[m" # Color Reset #------------------------------------------------------------- # Shell Prompt - for many examples, see: # http://www.debian-administration.org/articles/205 # http://www.askapache.com/linux/bash-power-prompt.html # http://tldp.org/HOWTO/Bash-Prompt-HOWTO # https://github.com/nojhan/liquidprompt #------------------------------------------------------------- # Current Format: [TIME USER@HOST PWD] > # TIME: # Green == machine load is low # Orange == machine load is medium # Red == machine load is high # ALERT == machine load is very high # USER: # Cyan == normal user # Orange == SU to user # Red == root # HOST: # Cyan == local session # Green == secured remote connection (via ssh) # Red == unsecured remote connection # PWD: # Green == more than 10% free disk space # Orange == less than 10% free disk space # ALERT == less than 5% free disk space # Red == current user does not have write privileges # Cyan == current filesystem is size zero (like /proc) # >: # White == no background or suspended jobs in this shell # Cyan == at least one background job in this shell # Orange == at least one suspended job in this shell # # Command is added to the history file each time you hit enter, # so it's available to all shells (using 'history -a'). # Test connection type: if [ -n "${SSH_CONNECTION}" ]; then CNX="\e[3"$(hostname | md5sum | cut -c 1)"m" #CNX="\e["$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')"m" #CNX=${Green} # Connected on remote machine, via ssh (good). elif [[ "${DISPLAY%%:0*}" != "" ]]; then CNX=${ALERT} # Connected on remote machine, not via ssh (bad). else CNX=${BCyan} # Connected on local machine. fi # Test user type: if [[ ${USER} == "root" ]]; then SU=${Red} # User is root. elif [[ ${USER} != $(logname) ]]; then SU=${BRed} # User is not login user. else SU=${BCyan} # User is normal (well ... most of us are). fi NCPU=$(grep -c 'processor' /proc/cpuinfo) # Number of CPUs SLOAD=$(( 100*${NCPU} )) # Small load MLOAD=$(( 200*${NCPU} )) # Medium load XLOAD=$(( 400*${NCPU} )) # Xlarge load # Returns system load as percentage, i.e., '40' rather than '0.40)'. function load() { local SYSLOAD=$(cut -d " " -f1 /proc/loadavg | tr -d '.') # System load of the current host. echo $((10#$SYSLOAD)) # Convert to decimal. } # Returns a color indicating system load. function load_color() { local SYSLOAD=$(load) if [ ${SYSLOAD} -gt ${XLOAD} ]; then echo -en ${ALERT} elif [ ${SYSLOAD} -gt ${MLOAD} ]; then echo -en ${Red} elif [ ${SYSLOAD} -gt ${SLOAD} ]; then echo -en ${BRed} else echo -en ${Green} fi } # Returns a color according to free disk space in $PWD. function disk_color() { if [ ! -w "${PWD}" ] ; then echo -en ${Red} # No 'write' privilege in the current directory. elif [ -s "${PWD}" ] ; then local used=$(command df -P "$PWD" | awk 'END {print $5} {sub(/%/,"")}') if [ ${used} -gt 95 ]; then echo -en ${ALERT} # Disk almost full (>95%). elif [ ${used} -gt 90 ]; then echo -en ${BRed} # Free disk space almost gone. else echo -en ${Green} # Free disk space is ok. fi else echo -en ${Cyan} # Current directory is size '0' (like /proc, /sys etc). fi } # Returns a color according to running/suspended jobs. function job_color() { if [ $(jobs -s | wc -l) -gt "0" ]; then echo -en ${BRed} elif [ $(jobs -r | wc -l) -gt "0" ] ; then echo -en ${BCyan} fi } # Adds some text in the terminal frame (if applicable). # Now we construct the prompt. PROMPT_COMMAND="history -a" case ${TERM} in *term | rxvt | linux) PS1="\[\$(load_color)\][\A\[${NC}\] " # Time of day (with load info): PS1="\[\$(load_color)\][\A\[${NC}\] " # User@Host (with connection type info): PS1=${PS1}"\[${SU}\]\u\[${NC}\]@\[${CNX}\]\h\[${NC}\] " # PWD (with 'disk space' info): PS1=${PS1}"\[\$(disk_color)\]\W]\[${NC}\] " # Prompt (with 'job' info): PS1=${PS1}"\[\$(job_color)\]>\[${NC}\] " # Set title of current xterm: PS1=${PS1}"\[\e]0;[\u@\h] \w\a\]" ;; *) PS1="(\A \u@\h \W) > " # --> PS1="(\A \u@\h \w) > " # --> Shows full pathname of current dir. ;; esac