Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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?

share|improve this question
    
Try .profile instead. –  jippie Jul 8 '12 at 18:22
2  
@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 Jul 8 '12 at 18:50
    
Just to make positive sure, you are putting .bashrc in your home folder, right? –  Jjed Aug 5 '12 at 8:08

2 Answers 2

up vote 28 down vote accepted

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"
    fi
fi

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.

share|improve this answer
3  
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
2  
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 at 12:18
    
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 at 11:40

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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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