What are the functional differences between the .profile, .bash_profile and .bashrc files?

According to the bash main page, .bash_profile is executed for login shells, while .bashrc is executed for interactive non-login shells.

So, 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.

An exception to the terminal window guidelines is Mac OS X’s Terminal.app, which runs a login shell by default for each new terminal window, calling .bash_profile instead of .bashrc. Other GUI terminal emulators may do the same, but most tend not to.

.profile

.profile is for things that are not specifically related to Bash, like environment variables PATH and friends, and should be available anytime.

For example, .profile should also be loaded when starting a graphical desktop session.


.bashrc

.bashrc is for the configuring the interactive Bash usage, like Bash aliases, setting your favorite editor, setting the Bash prompt, etc.


.bash_profile

.bash_profile is for making sure that both the things in .profile and .bashrc are loaded for login shells.

For example, .bash_profile could be something simple like

. ~/.profile
. ~/.bashrc

If you were to omit .bashrc, only .profile would be loaded.

Hopefully this helped you out, and if you have any question you can find us on Twitter and Facebook, and be sure to like and follow for future updates.

Until next time!

November 29 2019

Add or review comments

Please leave your comment

Existing comments

Comments 0


Get notified about new publications and product updates.
Please note we do not share information to anyone.