When working with Linux, I always forget which bash config file to edit when I want to set my
PATH and other environmental variables for my shell. Should you edit
.bashrc in your home directory?
You can put configurations in either file, and you can create either if it doesn’t exist. But why two different files? What is the difference?
According to the bash man page,
.bash_profile is executed for login shells, while
.bashrc is executed for interactive non-login shells.
What is a login or non-login shell?
When you login (type username and password) via console, either sitting at the machine, or remotely via ssh:
.bash_profile is executed to configure your shell before the initial command prompt.
But, if you’ve already logged into your machine and open a new terminal window (xterm) inside Gnome or KDE, then
.bashrc is executed before the window command prompt.
.bashrc is also run when you start a new bash instance by typing
/bin/bash in a terminal.
Why two different files?
Say you’d like to print some lengthy diagnostic information about your machine each time you login (load average, memory usage, current users, etc). You only want to see it on login, so you only want to place this in your
.bash_profile. If you put it in your
.bashrc, you’d see it every time you open a new terminal window.