Why doesn't Mac OS X source ~/.bashrc? I found a lot of people figuring out why instruction similar to this :


Put X to your ~/.bashrc and you can do Y



don't work.

It always turns out that Mac OS X's bash's startup files (or Mac's Bash itself) doesn't source ~/.bashrc file, either in the login shell, or in a shell spawned from window system - like Terminal app in Mac OS X)

Why is this, when all other Unix-like systems with Bash I've worked with before have done this?

PS:

I found what Bash itself says about startup files (which could be helpful) :


  When Bash is invoked as an interactive login shell, or as a
  non-interactive shell with the --login option, it first reads and
  executes commands from the file /etc/profile, if that file exists.
  After reading that file, it looks for ~/.bash_profile, ~/.bash_login,
  and ~/.profile, in that order, and reads and executes commands from
  the first one that exists and is readable. The --noprofile option may
  be used when the shell is started to inhibit this behavior.


Source : http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
In OSX the terminal  by default starts a login session so reads .bash_profile etc. (The GUI login process that asks for your name and password does not use shell scripts and starts no shell it is all done from launchd and the workspace)
On other Unices xterm runs a non login shell by default so they read .bashrc as the scripts that present you with your password etc at login call the login session and all terminals are sub process of this and inherit the shell environment.
From the GNU document you referred to

Invoked as an interactive non-login shell
When an interactive shell that is not a login shell is started, Bash
reads and executes commands from ~/.bashrc, if that file exists. This
may be inhibited by using the --norc option. The --rcfile file option
will force Bash to read and execute commands from file instead of
~/.bashrc.
So, typically, your ~/.bash_profile contains the line
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

after (or before) any
login-specific initializations.