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)?
- 41,213
- 69
- 165
- 232
- 16,149
- 29
- 101
- 149
-
6Note 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. – Paul Tomblin Oct 19 '11 at 12:05
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.
- 19,673
- 28
- 87
- 128
- 71,734
- 34
- 193
- 226
-
3
-
That's interesting that this doesn't work when I define `alias prg='prg.py'` . I have to close terminal. – xralf Oct 20 '11 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 '16 at 00: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).
- 41,213
- 69
- 165
- 232
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
- 292
- 3
- 10