16

.bashrc and /etc/bashrc

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

7
  • 1
    I don't see /etc/bashrc anywhere. Aug 21 '16 at 19:58
  • 2
    See bash's manpage section FILES.
    – Cyrus
    Aug 21 '16 at 19:58
  • 1
    @mikewhatever , you can find /etc/bash.bashrc . Aug 21 '16 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 '16 at 20:15
  • 1
    @Cyrus, I've found the answer from the link you've shared! Aug 21 '16 at 20:20
28

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
  • 2
    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 '19 at 21:25
  • 1
  • @legends2k Thank you for that. I updated the answer to add Arch Linux.
    – John1024
    Jul 24 '20 at 19:17
4

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.