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)?
3 Answers
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
source
is csh-derived. The bourne shell way is. .bashrc
. Commented 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.– xralfCommented 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.– KevinCommented Nov 11, 2016 at 0:18
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
).
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
. .bashrc
orsource .bashrc
in every shell you have open.