An annotated guide to Jon's .bashrc


I have a very basic bash setup for the labs (however there is a lot of hidden stuff going on which I will explain later). In general I use this setup to add some aliases for commands I use a lot and to add some extra tools which are not part of the general build.

The following is my .bashrc, if you want you can just copy this into your ~/.bashrc and use it.

source /etc/profile.d/
alias ls='ls --color'
alias ll='ls -al'
alias rm='rm -i'
alias code='/public/devel/2021/VSCode-linux-x64/code --no-sandbox '
alias rg='/public/devel/2021/bin/rg'
alias mayapy='/opt/autodesk/maya/bin/mayapy'
alias mysqlsh='/public/devel/2021/mysqlsh/bin/mysqlsh'
export PATH="/home/jmacey/.pyenv/shims:${PATH}:/public/devel/2021/swig/bin/"

What I will do next is explain what each line does and my motivation for adding it.

source /etc/profile.d/

This line executes the script /etc/profile.d/ using the source this sets some command prompt variables.

export PS1="[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]]"
export PS2="[\[\e[33m\]\u\[\e[m\]@\[\e[31m\]\h:\W$\[\e[m\]]"

These variables PS1-PS4 set different prompt levels depending upon how you are logged in. These commands set the prompt to be [Username@Hostname:CurrentDiR] so my root is [jmacey@w11901:~$] The escape codes set colours and other elements.

It is possible for you to override this into your own custom prompt, by using the export command.

For example this prompt created using the excellent will give you a git status for the current directory (if a repository)

export PS1="[\H]@\u\n\$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')\[$(tput sgr0)\]"

To make this work you just need to add it after the call to source /etc/profile.d/ or remove it (you can use # in .bashrc as a comment)

alias ls='ls --color'

This line uses the alias command to default the ls to use ls --color by default. In general most linux distributions seem to do this but not the version we are using.

The colours are determined by an environment variable called LS_COLORS which can be show using echo $LS_COLORS

The basic colours are as follows

colour meaning
Blue Directory
Green Executable or recognized data file
Cyan Symbolic link file
Yellow with black background Device
Magenta (Pink) Graphic image file
Red Archive file
Red with black background Broken link

alias ll='ls -al'

This alias adds to the previous line and makes the command ll give a long listing (with added colour). Again this is quite common in other linux distros and I have muscle memory using it so add this on the lab machines.

alias rm='rm -i'

This could be one of the most important commands to alias when using the shell (and in particular when learning linux). By default the rm will assume you know what you are doing and remove everything you pass to is (with some caveats depending upon other flags).

The -i flag tells the shell to be interactive making it ask you to press Y for each file on a prompt.

alias code='/public/devel/2021/VSCode-linux-x64/code --no-sandbox '

This alias points to a different version of vscode than the old version installed by default. The reason for this is that I can update the /public/devel version than all of the lab machines. This is one of the major advantages of linux that having a shared server / install location makes it easier to update and modify things.

You will notice the --no-sandbox flag used here. This is because VSCode is an electron app and be default needs to be installed setuid root however this can’t be done for the shared folder / install process we use. Using the flag fixes this however should be used with caution as noted here

alias rg='/public/devel/2021/bin/rg'

This alias is for running the rip grep tool (rg) I use this a lot for searching in files and various other things. Have a look here for more examples.

alias mayapy='/opt/autodesk/maya/bin/mayapy'

This allows me to run the maya python interpreter (2.7 at present) in the terminal. This is very useful for a number of reason, see my MSc lectures for more examples.

alias mysqlsh='/public/devel/2021/mysqlsh/bin/mysqlsh'

This alias is used to allow me to run mysqlsh for accessing databases installed in w119, see the Pipeline and TD lectures and labs for this.

export PATH="/home/jmacey/.pyenv/shims:${PATH}:/public/devel/2021/swig/bin/"

This uses the export function to prepend to the $PATH environment variable the location of pyenv. I use pyenv to allow me to setup and install different python versions. It is not needed unless you need to play with different python versions. For more details see the pyenv install here


This export add the location of NGL/lib to the python path so the pyngl library can be used. This takes some extra setup with NGL which is documented in the NGL readme files

Is that all?

Not really, when you login there are actually a number of scripts that run to setup the bulk of the environment for the user.

In particular the file /etc/profile.d/ is run for each user to setup the developer tools, environment variables for CMAKE and RENDERMAN. In the most part these are all used in programming / technical roles an are of no interest to most people so are hidden away.

The contents can be seen here.

export PATH=$PATH:/public/bin/2021:/opt/qt/5.15.2/gcc_64/bin:/opt/qt/Tools/QtCre

export CMAKE_TOOLCHAIN_FILE=/public/devel/2021/vcpkg/scripts/buildsystems/vcpkg.
export CMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH:~/NGL:/opt/qt/5.15.2/gcc_64/lib/cmak
export CMAKE_MODULE_PATH=/opt/qt/5.15.2/gcc_64/lib/cmake

# Setup modern compilers
# this set the default compiler tool-chain to be devtoolset-7
source scl_source enable devtoolset-9
source scl_source enable llvm-toolset-7

# update package config
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/public/devel/2021/vcpkg/installed/x64-l

export RMANTREE=/opt/pixar/RenderManProServer-24.1