25

.bashrc and /etc/bashrc

What's the difference between /etc/bash.bashrc and ~/.bashrc?

7
  • 2
    I don't see /etc/bashrc anywhere. Aug 21, 2016 at 19:58
  • 3
    See bash's manpage section FILES.
    – Cyrus
    Aug 21, 2016 at 19:58
  • 4
    @mikewhatever , you can find /etc/bash.bashrc . Aug 21, 2016 at 20:12
  • @Cyrus I checked the man page FILES section and "bash.bashrc" doesn't appear there only "~/.bashrc" appears. Could you provide link to man page you were looking at? I was looking at Bash Man Page Aug 21, 2016 at 20:15
  • 1
    @Cyrus, I've found the answer from the link you've shared! Aug 21, 2016 at 20:20

2 Answers 2

34

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):

  1. 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.

3
  • 4
    It'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.
    – BenPen
    Dec 4, 2019 at 21:25
  • 2
  • @legends2k Thank you for that. I updated the answer to add Arch Linux.
    – John1024
    Jul 24, 2020 at 19:17
5

System wide initialization file /etc/bash.bashrc and the standard personal initialization file ~/.bashrc if the shell is interactivе.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .