Select the color which matches the steps before filenames ((non-)login and (non-)interactive), then follow that arrow the rest of the way. There’s more colors in Bash because Bash makes a distinction between remote and local shells.
Another way to look at the same data for Zsh (note: $ZDOTDIR will be used instead of $HOME if it’s defined at any step along the way):
And what’s confusing is that many times those files still manually call the others to make it more logical like zsh. That’s what I remember at least, it’s been quite a while since I used bash.
Select the color which matches the steps before filenames ((non-)login and (non-)interactive), then follow that arrow the rest of the way. There’s more colors in Bash because Bash makes a distinction between remote and local shells.
Another way to look at the same data for Zsh (note:
$ZDOTDIR
will be used instead of$HOME
if it’s defined at any step along the way):/etc/zshenv
${ZDOTDIR:-$HOME}/.zshenv
${ZDOTDIR:-$HOME}/.zprofile
${ZDOTDIR:-$HOME}/.zshrc
${ZDOTDIR:-$HOME}/.zlogin
${ZDOTDIR:-$HOME}/.zlogout
One confusion on the Bash side of the diagram is that you see branching paths into
~/.profile
,~/.bash_profile
and~/.bash_login
. Bash will use for~/.bash_profile
,~/.bash_login
, and~/.profile
, in that order, and execute only the first one that exists and is readable.And what’s confusing is that many times those files still manually call the others to make it more logical like zsh. That’s what I remember at least, it’s been quite a while since I used bash.
Yeah, most distros will set up
source
chains to make things nicer for users.