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.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.
-
3It's worth noting that the usage is spreading. Git bash, based off of MSYS2, also has this convention. It seems to be adopted to establish system level adaptations/configurations/standards.– BenPenDec 4, 2019 at 21:25
-
2
-
@legends2k Thank you for that. I updated the answer to add Arch Linux.– John1024Jul 24, 2020 at 19:17
System wide initialization file /etc/bash.bashrc
and the standard personal initialization file ~/.bashrc
if the shell is interactivе.
/etc/bashrc
anywhere.