See e.g. [this at baeldung.com](https://www.baeldung.com/linux/bashrc-vs-bash-profile-vs-profile) Basically, in an interactive **login shell** 1. `/etc/profile 2. User profile 1. `~/.bash_profile` if present; else 3. `~/.bash_login` if present; else 3. `~/.profile` if present but not `.bashrc`. Thus usually, `.bashrc` is sourced by the `.profile`. The issue is the overhead in setting everything up, since `.bashrc` is run every time a new shell is opened, and most variables can be inherited from the login shell.