tl;dr version: use
And read the man page to understand the differences between:
Regarding my comment
In my comment attached to the answer kev gave, I said:
This seems to be incorrect – /etc/profile isn’t listed in any zsh documentation I can find.
This turns out to be partially incorrect:
/etc/profile may be sourced by
zsh. However, this only occurs if
zsh is “invoked as
ksh“; in these compatibility modes:
The usual zsh startup/shutdown scripts are not executed. Login shells source /etc/profile followed by $HOME/.profile. If the ENV environment variable is set on invocation, $ENV is sourced after the profile scripts. The value of ENV is subjected to parameter expansion, command substitution, and arithmetic expansion before being interpreted as a pathname. [man zshall, “Compatibility”].
The ArchWiki ZSH link says:
At login, Zsh sources the following files in this order:
This file is sourced by all Bourne-compatible shells upon login
This implys that
/etc/profile is always read by
zsh at login – I haven’t got any experience with the Arch Linux project; the wiki may be correct for that distribution, but it is not generally correct. The information is incorrect compared to the zsh manual pages, and doesn’t seem to apply to zsh on OS X (paths in
$PATH set in
/etc/profile do not make it to my zsh sessions).
To address the question:
where exactly should I be placing my rvm, python, node etc additions to my $PATH?
Generally, I would export my
~/.zshrc, but it’s worth having a read of the zshall man page, specifically the “STARTUP/SHUTDOWN FILES” section –
~/.zshrc is read for interactive shells, which may or may not suit your needs – if you want the
$PATH for every
zsh shell invoked by you (both
interactive and not, both
login and not, etc), then
~/.zshenv is a better option.
Is there a specific file I should be using (i.e. .zshenv which does not currently exist in my installation), one of the ones I am currently using, or does it even matter?
There’s a bunch of files read on startup (check the linked
man pages), and there’s a reason for that – each file has it’s particular place (settings for every user, settings for user-specific, settings for login shells, settings for every shell, etc).
Don’t worry about
~/.zshenv not existing – if you need it, make it, and it will be read.
.bash_profile are not read by
zsh, unless you explicitly source them from
~/.zshrc or similar; the syntax between
zsh is not always compatible. Both
.bash_profile are designed for
bash settings, not