What's the difference between .bashrc and /etc/bash.bashrc?
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.bashrc
before~/.bashrc
for interactive non-login shells. So, on Debian systems,/etc/bash.bashrc
is to~/.bashrc
as/etc/profile
is 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 ~/.bashrc
if the shell is interactivе.