
As far as I can tell, if every interactive shell sourced "profile" files, nothing terrible would happen, in the default configuration.

That's inefficient and (much more importantly) makes it hard to understand the contents of PATH. If bin exists in your home folder and your username is james, your PATH in the innermost shell is something like: /home/james/bin:/home/james/bin:/home/james/bin:/home/james/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games Suppose you SSH'd in, ran another shell (say, zsh), at some point found you wanted to temporarily go back to bash but keep your environment (so ran bash again while in zsh), and then ran a program like mc that runs a shell as part of its interface.


For example, on my Ubuntu 12.04 system, /etc/profile includes these lines: if then Rather, commands in /etc/profile calls them. This is for Bourne-style shells, but it's not coded into the shell executable itself. etc/profile, run by all Bourne-compatible shells (including bash and dash) when started as a login shell. The purpose of the "profile" files is to contain commands that ought to be run for login shells only. If you want a command to run for interactive shells that are not login shells, and you're using bash, put it in ~/.bashrc or /etc/bash.bashrc. etc/profile is invoked only for login shells because that is its specific purpose.
