Bash Users' Startup Files: Quick Start Guide
Last update: May 29, 2019
While the startup behavior of the bash shell can seem to require a Ph.D in Shellology, here we try to simplify the discussion to the minimum required to get you started. In general, every time you interactively access a TACC resource, Bash will source either your ~/.profile
or ~/.bashrc
file. Which one is sourced is complicated and not really important; see the troubleshooting notes below for some additional fine print. In either case, to get the same behavior in all of the interactive shells, you'll need to have your ~/.profile
source the ~/.bashrc
and put all the important statements in your ~/.bashrc
.
# ~/.profile
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
One important idea is that every interactive sub-shell will source your ~/.bashrc
. This means that if you wish to add personal directories to your $PATH
, you'll only want do it once. An environment variable (called MYPATH
in the example) can be used to enforce this behavior:
# ~/.bashrc
if [ -z "$MYPATH" ]; then
export MYPATH=1
export PATH=$HOME/bin:$PATH
fi
A TACC user may wish to have many things defined every time on login such as:
- Certain modules loaded
- Define useful aliases and shell functions
- Add personal directories to
$PATH
. - Set environment variables
Rather than describe all these steps here we have sample startup scripts that you can copy and modify to suit. They can be found on all machines in this location:
/usr/local/startup_scripts/dot.*
Your account may already have these files, but if not run the following script:
login1$ /usr/local/startup_scripts/install_default_scripts
Then edit your new ~/.bashrc
to suit yourself.
To test always have one terminal to edit and another terminal to test with.
Troubleshooting
-
Your
~/.profile
is not read during a login shell.Check to see if your home directory contains
~/.bash_profile
or~/.bash_login
. For a login shell bash will search first for~/.bash_profile
, if doesn't exist, then it searches for~/.bash_login
. Finally it searches for a~/.profile
. Please pick one of the three and stick with that. -
For every sub-shell your path gets longer and longer.
Check to see if you are changing the
$PATH
variable outside of a guarded if-block similar to the one above.
Reference
This quickstart guide covers the basics. For more information please look at the web. Here are two resources: