75

When I define a new alias in .bash_aliases file or a new function in .bashrc file, is there some refresh command to be able immediately use the new aliases or functions without closing the terminal (in my case xfce4-terminal with a few tabs open, many files open and in the middle of the work)?

1
  • 6
    Note that there is no command that will made that new command known in all your open terminals/tabs. You'll have to do the . .bashrc or source .bashrc in every shell you have open. Oct 19, 2011 at 12:05

3 Answers 3

91

Sourcing the changed file will provide access to the newly written alias or function in the current terminal, for example:

source ~/.bashrc

An alternative syntax:

. ~/.bashrc

Note that if you have many instances of bash running in your terminal (you mentionned multiple tabs), you will have to run this in every instance.

3
  • 3
    source is csh-derived. The bourne shell way is . .bashrc. Oct 19, 2011 at 12:04
  • That's interesting that this doesn't work when I define alias prg='prg.py' . I have to close terminal.
    – xralf
    Oct 20, 2011 at 11:49
  • "you will have to run this in every instance." - Note that zsh users can set TMOUT and TRAPALRM appropriately to stat and (if necessary) re-source ~/.zshrc once per second, or at any other reasonable interval. I don't believe bash can do this, though.
    – Kevin
    Nov 11, 2016 at 0:18
7

Typing . ~/.bashrc at the command line will run .bashrc and so any functions defined in that file will be created.

.bashrc itself will then also call and run .bash_aliases (if it exists) if .bashrc has this code in it:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

whereas using . ~/.bash_aliases alone (at the command line for example) will just try and run .bash_aliases without involving .bashrc and will give an error if the file doesn't exist (hence the file check test when in .bashrc).

5

Sometimes you will want to turn an alias into a function, but when you source the bashrc file, a weird error may occur:

. ~/.bashrc
bash: /home/username/.bashrc: line 38: syntax error near unexpected token `('
bash: /home/username/.bashrc: line 38: `hello_world() {'

This may be happening because the alias name is clashing with the name of the newly defined function. As far as I know, to avoid this one needs to unalias everything, then source the bashrc file:

bash-4.3 $
unalias -a && . $HOME/.bashrc

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.