When opening a new terminal, I need to do source ~/.bashrc or source ~./bash_profile before my $PATH variable is initalised. I thought .bashrc did this automatically? How do I make it so I don't need to do that.

1 Answer 1


I'm not sure if I understand your questions but:

Your bash init files should be sourced at boot. If not your system is badly configured or broken.

You didn't mention your Operating System, but I'm guessing you are using Linux, any way.

The sequence of initialization, according to man bash is the following:

When bash is invoked as an interactive login shell, or as a non-inter‐ active shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.

In an Ubuntu distribution, for example, after loading the /etc/profile, it looks for a ~/.profile file that looks like this:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then

Which means that, if using bash and the file ~/.bashrc exists it will be loaded/sourced and after that it will set your $PATH variable.

So I suggest you first take a look at your ~/.profile file and fix it, if necessary.

You must log in to answer this question.