The code in .bashrc does not execute when I open a new terminal window in Ubuntu 12.04. I noticed this when creating a .bash_aliases file. The aliases did not show up when I opened a new terminal. However when I type source .bashrc the aliases did show up.

.bashrc should be run everytime I open a new terminal window right?

How do I make this happen?

  • 2
    Try .profile instead. – jippie Jul 8 '12 at 18:22
  • 5
    @jippie No, .profile is read at login time, not when you open a new terminal, unless there's a misconfiguration somewhere. Selah: did you change anything from the default configuration? Please run ps -o command $$ $PPID in a terminal and copy-paste the output. – Gilles 'SO- stop being evil' Jul 8 '12 at 18:50
  • 1
    Just to make positive sure, you are putting .bashrc in your home folder, right? – Jjed Aug 5 '12 at 8:08
  • 2
    Might want to check echo $SHELL. This happened to me and the shell was /bin/sh instead of bash. Fix it in /etc/passwd and its running .bashrc. – Joe Flynn Jan 28 '16 at 15:54
  • this happened to me because I accidentally ran $ rm -r ~ – Rockstar5645 Apr 27 '20 at 19:21

It isn't necessarily run; at the top of the standard .bashrc is this comment:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

I believe there is an option to run bash terminal as a login shell or not. With Ubuntu, gnome-terminal does not normally run as a login shell, so .bashrc should be run directly.

For login shells (like the virtual terminals), normally the file ~/.profile is run, unless you have either ~/.bash_profile or ~/.bash_login, but they are not there by default. By default, Ubuntu uses only .profile.

The standard ~/.profile has this in it:

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

This runs .bashrc if it is available - assuming $BASH_VERSION is present in your environment. You can check for this by entering the command echo $BASH_VERSION, and it should display some information on version number - it should not be blank.

  • 4
    After understanding these instructions, I went in my terminal application I went to edit -> profile preferences -> Title and Command -> Run command as a login shell. I unchecked this. Thanks for the help. – Selah Oct 8 '12 at 16:36
  • Can you clarify when .profile (hence .bashrc) is loaded/read? It seems this is done when the users logs in to their desktop session. The answer suggests this occurs when you start a new terminal/shell session "For login shells (like the virtual terminals), normally the file ~/.profile is run... " – hedgehog Jan 7 '13 at 4:48
  • 5
    It is normally run when you start a new login shell (not really desktop session, because you can run a new login shell from the desktop session). As I said, it is run by default, but not if you have created ~/.bash_profile or ~/.bash_login. You can test by checking or unchecking the checkbox in Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell, and exit then rerun the terminal. You could echo something from .profile to test. – Marty Fried Jan 7 '13 at 21:23
  • @Selah Your comment helped me more then the actual answer ;) thanks a lot for making the comment! – Aleks Jan 14 '14 at 12:18
  • 1
    So if you have created ~/.bash_profile or ~/.bash_login on your system and want to keep them, but still want ~/.profile and from there ~/.bashrc executed, you can source it from your own ~/.bash_profile or ~/.bash_login with a line containing source "$HOME/.profile". Gives you back the colored output of ls also in login shells! – tanius Mar 2 '14 at 11:40

In my case, simply the .bashrc loader lines were missing in .bash_profile

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

I added it manually and it worked with my fresh login

  • 3
    .bash_profile? Ubuntu uses a .profile by default, not .bash_profile. – muru May 6 '16 at 8:30
  • ubuntu server often does not pickup .bashrc ... above works so does ... cat .bash_profile [[ -s "$HOME/.bashrc" ]] && source "$HOME/.bashrc" # Load the default – Scott Stensland Aug 26 '16 at 21:52
  • This solved it for me! I added pcre and it seems like it overwrote the bash profile instead of adding it. – shapiro yaacov Feb 3 '19 at 8:13
  • this worked for me on WSL Ubuntu 18.04 – Erich Jan 27 '20 at 15:42
  • Perfect! Thankyou – Uzumaki Naruto Jun 21 '20 at 12:50

.bash_profile holds configuration for the bash shell. When you open a terminal, it first reads and executes commands from ~/.bash_profile. So you can add the following in .bash_profile to setup the shell according to bashrc.

. ~/.bashrc
  • Unless your terminal is running a login shell (which it doesn't by default in Ubuntu), ~/.bash_profile won't be read (and it doesn't exist by default in Ubuntu) – muru Jan 10 '17 at 5:49

If $BASH_VERSION is not set, try using the chsh command to set your shell to /bin/bash.

I had a similar issue with 12.04 LTS, and it turned out the new user account had the default shell set to /bin/sh, which was the cause of the problem.

  • This was the reason! – mulya Sep 24 '15 at 19:21

Accoding to the comment in .profile

~/.profile: executed by the command interpreter for login shells.¬ 11 This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login¬ 10 # exists

So there you go, if ~/.bash_profile or ~/.bash_login exists, those will get run instead of ~/.profile

if you want to run ~/.bashrc just add the line source ~/.bashrc in bash_profile

  • 1
    I have experienced the exact same issue. My .bashrc was being sourced until I created a .bash_profile file. So I prepended source ~/.bashrc line to my .bash_profile file. – Lashae Aug 29 '19 at 6:22

It was pretty simple for me. I installed mssqltools and somehow it created a file bash_profile in $HOME directory. As bash_profile runs before bashrc is picked up so if you don't have source command in bash_profile, bashrc won't run.

There are two ways to tackle this, either delete bash_profile or if you use bash_profile, just add the following line anywhere in the file source ~/.bashrc


Instead of going all through that just go Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell" and in Custom command box write bash and close it. The next time you'll open the terminal, it'll also run bash automaticlly.

  • Which GUI are you referring to? gnome or unity – Nic Wanavit Aug 29 '19 at 6:30
  • This is terrible advice as it papers over the cracks.. It's also not correct as whether bashrc is sourced depends on the presence or not of bash_profile. – RichieHH Dec 8 '20 at 0:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.