PEAT Online Course -
How To Improve Your Personal Performance in Java work Technology

  • Focus
  • Autonomy
  • Proficiency
  • Purpose
  • Covid-19!!!
  • Deep Hidden Meaning
  • FREE updates
Your Promo code: TECHLAYOFF
Exclusively on

My favourite Bash profile Linux and Mac OS X updated for 2018

19 February 2018 Comments off

7 minutes


Bash Shell Programming Course?!

Are you interested in Linux and Bash shell programming online video course? If the answer is yes, then sign up to my VIP mailing list,. alternatively, hit me up on Twitter with the message a like:

 "Hi @peter_pilgrim I am interested in a Bash / Shell programming course."
Exclusive VIP Access

Signup to my VIP mailing list in order to get notified & receive my biggest discount off the listed price.

Email Format

I will never share your email address with anybody and you can unsubscribe anytime.


Some of you are here, because you are interested in hiring me for a contract engagement. I know this, because I look at the analytics.

Next contract shall be

  • OUTSIDE IR35 or Statement of Work
  • Remote working for the foreseeable future
  • Contract rate £PRICE on application (SOW)
    • (In 2018-2019, in Central London, typical contract rates were £550 – £750 per day depending on the requirements and provided materials)
  • Or stupidly insane permanent salary from £101K base in the United Kingdom
  • Or by the way, I will be the technical lead or senior designer.

Other you can’t deal with that, then it is waste of yours and my time.

Carry on

As a platform engineer, I want to keep a copy of a my favourite Linux Bash Profile in my blog on the public web, so that I do not have to keep making it up from scratch every time I configure a Virtual Machine.

## MY FAVOURITE BASH PROFILE ~/.bash_profile
### Based of the
### and

# Load workspace HTTP proxy configuration, if any
if [ -f ${HOME}/ ]; then
    . ${HOME}/

set -o emacs
# Do not exit on EOF. To exit the shell type `exit'
set -o ignoreeof
# Do not allow output redirection (>) to overwrite an existing file
set -o noclobber
# set the core limit
ulimit -c 10240

# As a platform engineer, I want to upgrade SHELL history to "remember long time"
set history=1024
set savehist=1024

## Olde skool :-/  export LDFLAGS='-lpthread' #Old skool
## Slackware: export LS_OPTIONS='--8bit --color=tty -F -b -T 0'
## export LS_OPTIONS='--color=tty -F -b --author'
export LS_OPTIONS='-F'

# Aliases
alias ls="/bin/ls $LS_OPTIONS"
alias ll='ls -l'
alias lsd='ls -ld'
alias la='ls -a'
alias lf='ls -F'
alias lr='ls -alFRt'
alias lx='ls -xF'
alias llar='ls -laFR'
alias lt='ls -lartF'
alias lrt='ls -lrt'

alias home='cd ${HOME}'
alias up='cd ..'
alias up2='cd ../..'
alias up3='cd ../../..'
alias up4='cd ../../../..'
alias up5='cd ../../../../..'
alias pe='printenv'
alias senv='env | sort'
alias pu='pushd'
alias po='popd'
alias pud='pushd .'
alias rot='pushd +1'
alias jobs='jobs -l'
alias mroe=more
alias lses=less
alias lsse=less
alias l=ls
alias f=file
alias c=cat
alias m=more
alias j=jobs
alias k=kill
alias d=dirs
alias h=history
alias his=history
alias hm='history | less'
alias sy3='sync; sync; sync; echo "sync 3 times ..."'
alias del='rm -i'
alias bye=exit
alias ciao=exit

## Some quick GIT alias
alias gpull='git pull origin master'
alias gpush='git push origin master'
# As a platform engineer, I want to configure Git cache to remember my password for one month on average
alias set_git_cache='git config --global credential.helper "cache --timeout=2548800" '

alias macjava=/usr/libexec/java_home

# Switch between JDK 8,9,10 and 11
function checkSetJdk() {
    if [ $# -ne 0 ]; then
        /usr/libexec/java_home -v $@ > /dev/null 2>&1
        if [ $status -ne 0 ]; then
            echo "*ERROR*: Sorry, this version of the JDK [$@] does not exist. (status:$status)" 1>&2
            return 1
            removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
            if [ -n "${JAVA_HOME+x}" ]; then
                removeFromPath $JAVA_HOME
            export JAVA_HOME=`/usr/libexec/java_home -v $@`
            # echo -e "\n*FINAL* setting JAVA_HOME to ${JAVA_HOME}"

            # Does the older JRE folder exist
            if [ -d ${JAVA_HOME}/jre ]; then
                export PATH=$JAVA_HOME/jre/bin:$PATH
            export PATH=$JAVA_HOME/bin:$PATH
            # echo -e "\n*FINAL* setting PATH to $PATH"

function removeFromPath() {
    export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
    ### echo -e "\n*DEBUG setting now to PATH=$PATH"

## See this Apple Support Discussion
alias restart-webcam='sudo killall VDCAssistant'

alias vibashpro='vi ~/.bash_profile'
alias rebashpro='. ~/.bash_profile'

## Where is GO Language installed?
export GO_HOME=/opt/go

## Where is Java installed?
export JAVA_HOME=`/usr/libexec/java_home`
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0/jdk1.8.0_181
export JAVA8_HOME=/usr/lib/jvm/jdk1.8.0/jdk1.8.0_181


# Where is Scala installed (Mac OS X)?
## export SCALA_HOME=/Library/opt/scala/scala-2.11.7
export SCALA_HOME=${HOME}/.sdkman/candidates/sbt/current

# Where is SBT installed (Mac OS X)?
## export SBT_HOME=/Library/opt/sbt/sbt-0.13.12
export SBT_HOME=${HOME}/.sdkman/candidates/sbt/current/bin/sbt

# Where is Groovy installed (SDK Man)
## export GROOVY_HOME=${HOME}/.sdkman/groovy/current
export GROOVY_HOME=${HOME}/.sdkman/candidates/groovy/current

# Where is Ant installed (Mac OS X)?
export ANT_HOME=${HOME}/.sdkman/candidates/ant/current

# Where is Maven installed (Mac OS X)?
export M2_HOME=${HOME}/.sdkman/candidates/maven/current

export MAVEN_OPTS="-XX:MaxPermSize=256m -Xms512m -Xmx1024m"

# Where is Gradle installed (Mac OS X)?
export GRADLE_HOME=${HOME}/.sdkman/candidates/gradle/current

# Where is Node installed?
export NODE_PATH=/usr/local/lib/node_modules

## Where is IntelliJ installed?
export INTELLIJ_HOME=/opt/intellij-idea

## Define PATH
export PATH=.:${HOME}/bin:${HOME}/.local/bin:\

## Keep a copy of the original PATH
export ORIGINAL_PATH=${HOME}/bin:${HOME}/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

### This is the original PS1 on Debian (e.g Ubuntu or Linux Mint)
#### "${debian_chroot:+($debian_chroot)}\u@\h \w \$ "
export SAVED_PS1="${debian_chroot:+($debian_chroot)}\u@\h \w [\$HISTCMD] \$ "

## Ansi Color XTerm (tested on LinuxMint )
## See also
#export PS1="\e[38;5;034m\u@\h \e[0m\e[38;5;039m\W\e[0m [\$HISTCMD] > "

# Add the Git Bash completion, if it exists

if [ -f ${HOME}/git-completion.bash -a -r ${HOME}/git-completion.bash ]; then
    #### echo ${HOME}/git-completion.bash (see also )
    . ${HOME}/git-completion.bash

[[ -s "$HOME/.sdkman/bin/" ]] && source "$HOME/.sdkman/bin/"

## This is for Ruby Version Manager
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*

## This is for Node Version Manager
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/" ] && . "$NVM_DIR/"

## END

That was my user story from last week.


I want to also share this BASH configuration in Home office and Work office situation. In work office, like you I work behind a HTTP Proxy so I extracted shell as an environment script to source-in.

## File: ~/
## set the proxy connections# set the proxy connections# set the proxy connections
#export HTTP_PROXY=''
#export HTTPS_PROXY=''
#export NO_PROXY="localhost,, 10.24*, *, *.corp"
#export http_proxy=${HTTP_PROXY}
#export https_proxy=${HTTPS_PROXY}
#export no_proxy=$NO_PROXY

Save this this shell source scripts as ${HOME}/ and then the file private to your user with the command: chmod 600 ${HOME}/

Have fun and enjoy your day.


Hey all! Thanks for visiting. I provide fringe benefits to interested readers: checkout consultancy, training or mentorship Please make enquiries by email or
call +44 (0)7397 067 658.

Due to the Off-Payroll Working plan for the UK government, I am enforcing stricter measures on contracts. All potential public sector GOV.UK contracts engagements must be approved by QDOS and/or SJD Accounting. Please enquire for further information.