Customizing BASH: PS1
There are allot of white papers on customizing the bash prompt. This one is of course different... by a small margin. It starts by mapping out colors from "\033" or "ESC" commands into text commands for better reading, modifying, or if you change your background with a transparent terminal running most of the time you need to change colors of your text, this should help somewhat.
You will need a dependency:
#.bashrc DULL=0 BRIGHT=1 FG_BLACK=30 FG_RED=31 FG_GREEN=32 FG_YELLOW=33 FG_BLUE=34 FG_VIOLET=35 FG_CYAN=36 FG_WHITE=37 FG_NULL=00 BG_BLACK=40 BG_RED=41 BG_GREEN=42 BG_YELLOW=43 BG_BLUE=44 BG_VIOLET=45 BG_CYAN=46 BG_WHITE=47 BG_NULL=00 ESC="\033" NORMAL="\[$ESC[m\]" RESET="\[$ESC[${DULL};${FG_WHITE};${BG_NULL}m\]" BLACK="\[$ESC[${DULL};${FG_BLACK}m\]" RED="\[$ESC[${DULL};${FG_RED}m\]" GREEN="\[$ESC[${DULL};${FG_GREEN}m\]" YELLOW="\[$ESC[${DULL};${FG_YELLOW}m\]" BLUE="\[$ESC[${DULL};${FG_BLUE}m\]" VIOLET="\[$ESC[${DULL};${FG_VIOLET}m\]" CYAN="\[$ESC[${DULL};${FG_CYAN}m\]" WHITE="\[$ESC[${DULL};${FG_WHITE}m\]" BRIGHT_BLACK="\[$ESC[${BRIGHT};${FG_BLACK}m\]" BRIGHT_RED="\[$ESC[${BRIGHT};${FG_RED}m\]" BRIGHT_GREEN="\[$ESC[${BRIGHT};${FG_GREEN}m\]" BRIGHT_YELLOW="\[$ESC[${BRIGHT};${FG_YELLOW}m\]" BRIGHT_BLUE="\[$ESC[${BRIGHT};${FG_BLUE}m\]" BRIGHT_VIOLET="\[$ESC[${BRIGHT};${FG_VIOLET}m\]" BRIGHT_CYAN="\[$ESC[${BRIGHT};${FG_CYAN}m\]" BRIGHT_WHITE="\[$ESC[${BRIGHT};${BG_WHITE}m\]" REV_CYAN="\[$ESC[${DULL};${BG_WHITE};${BG_CYAN}m\]" REV_RED="\[$ESC[${DULL};${FG_YELLOW}; ${BG_RED}m\]" PROMPT_COMMAND='export ERR=$?'
Its possible you need a ".bash_profile" here is one you can use if you don't have one. Put it in your home directory, along with ".bashrc"
#.bash_profile source .bashrc if [ -f ~/.bashrc ]; then . ~/.bashrc fi #End Script
Lets put it to work: I personally would comment out my currently working ##"PS1=" and put it below it in case you need to change it back for some reason.
Note: Works best if it is one line.
PS1="${GREEN}YOUR COMPANY NAME HERE${BRIGHT_YELLOW}[${YELLOW}\u@\h${BRIGHT_YELLOW}]\n${BRIGHT_CYAN}[${CYAN}\t${BRIGHT_CYAN}]${BRIGHT_VIOLET}[${VIOLET}\$(~/sbin/lsMB)${BRIGHT_VIOLET} | ${VIOLET}\$(~/sbin/lsMiB)${BRIGHT_VIOLET}]${WHITE}[ \w ]\n${YELLOW}$> ${RESET}"
Should look like this minus the colors:
YOUR COMPANY NAME HERE[su_pyrow@CompElitePC.host56.com] [13:57:23][590.478 MB|563.316 MiB][/media/cdrom] $>
With colors:
To get the sum of files in current working directory, I made two files which do the summing. "lsMB" and "lsMiB" which on my system are both located in ~/sbin as executable. Here is lsMB:
#!/bin/bash #lsMB free for anyone who wishes to implement it. let TotalBytes=0 for Bytes in $(ls -l -a | grep "^-" | awk '{ print $5 }') do let TotalBytes=$TotalBytes+$Bytes done if [ $TotalBytes -lt 1024 ]; then TotalSize=$(echo -e "scale=3 \n$TotalBytes \nquit" | bc) suffix="B" else if [ $TotalBytes -lt 1048576 ]; then TotalSize=$(echo -e "scale=3 \n$TotalBytes/1024 \nquit" | bc) suffix="kB" else if [ $TotalBytes -lt 1073741824 ]; then TotalSize=$(echo -e "scale=3 \n$TotalBytes/1048576 \nquit" | bc) suffix="MB" else if [ $TotalBytes -lt 1099511627776 ]; then TotalSize=$(echo -e "scale=3 \n$TotalBytes/1073741824 \nquit" | bc) suffix="GB" fi fi fi fi echo -n "$TotalSize $suffix" #End Script
Finally, this is the lsMiB executable file located in "~/sbin" This has the modification for the conversion to KiB, MiB & GiB one could further the code to handle TB/TiB easily by calculating from the above and using WIKI Terabyte and WIKI Tebibyte.
#!/bin/bash #lsMiB free for anyone who wishes to implement it. let TotalBytes=0 for Bytes in $(ls -l -a | grep "^-" | awk '{ print $5 }') do let TotalBytes=$TotalBytes+$Bytes done if [ $TotalBytes -lt 1024 ]; then TotalSize2=$(echo -e "scale=3 \n$TotalBytes \nquit" | bc) suffix2="B" else if [ $TotalBytes -lt 1048576 ]; then TotalSize2=$(echo -e "scale=3 \n$TotalBytes/1024*.976 \nquit" | bc) suffix2="KiB" else if [ $TotalBytes -lt 1073741824 ]; then TotalSize2=$(echo -e "scale=3 \n$TotalBytes/1048576*.954 \nquit" | bc) suffix2="MiB" else if [ $TotalBytes -lt 1099511627776 ]; then TotalSize2=$(echo -e "scale=3 \n$TotalBytes/1073741824*.931 \nquit" | bc) suffix2="GiB" fi fi fi fi echo -n "$TotalSize2 $suffix2" #End Script
One would be able to see the changes if 1) Restart the Terminal or 2) type
$ source ~/.bashrc
and you will instantly see the changes.
Extras
genpasswd () { local l=$1 [ "$l" == "" ] && l=16 tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs } extract () { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) rar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1 ;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via extract()" ;; esac else echo "'$1' is not a valid file" fi } mkcompressed () { FILE=$1 shift case $FILE in *.tar.bz2) tar cjf $FILE $* ;; *.tar.gz) tar czf $FILE $* ;; *.tgz) tar czf $FILE $* ;; *.zip) zip $FILE $* ;; *.rar) rar $FILE $* ;; *) echo "Filetype not recognized" ;; esac } remindme () { sleep $1 && zenity --info --text "$2" & }