What's the difference between /etc/bash.bashrc and ~/.bashrc?
2 Answers
When bash initializes a non-login interactive bash shell on a Debian/Ubuntu-like system, the shell first reads /etc/bash.bashrc and then reads ~/.bashrc.
The reason that /etc/bash.bashrc does not appear in normal bash documentation (such as here or here) is that it is a feature added by Debian and adopted by Ubuntu. As Debian explains it (readme.debian):
- What is /etc/bash.bashrc? It doesn't seem to be documented.
The Debian version of bash is compiled with a special option (
-DSYS_BASHRC) that makes bash read/etc/bash.bashrcbefore~/.bashrcfor interactive non-login shells. So, on Debian systems,/etc/bash.bashrcis to~/.bashrcas/etc/profileis to~/.bash_profile.
Thus, /etc/bash.bashrc is documented in the Debian and Ubuntu man pages but not in man pages from other distributions that do not support this feature.
Update: More distributions
/etc/bash.bashrc has been adopted beyond Debian circles as comments indicate its usage in distros like Arch Linux, MSYS2 and thereby Git Bash.
System wide initialization file /etc/bash.bashrc
and the standard personal initialization file ~/.bashrcif the shell is interactivе.