Search code examples
permissionsexeczshzshrczsh-alias

Recommended method for reloading `.zshrc`? (`source` VS `exec`?)


Most people seem to recommend using source for reloading .zshrc. Why?

First I tried out source ~/.zshrc. But it resulted in a compinit error (at reload, not for new shell instances at first .zshrc load).

My reload alias is now:

alias zsh-reload="exec zsh"

instead of:

source ~/.zshrc

The reason for this is that my previous reload method (source) triggered a compinit error;

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

So I'm now doing exec because I believie it ensures the previous environment doesn't pollute the new one.

  • What are the downsides of using the exec method?
  • Is there an explicit reason for that you're doing exec or source?
  • Could exec in theory cause unexpected problems compared to the source method?

Solution

  • With exec, all (unexported) variables in your shell are lost, which is probably not what you want. Instead, it might be better to fix the compinit problem, by using compinit -i. See the zsh man page for compinit, paragraph Use of compinit:

    to make compinit silently ignore all insecure files and directories use the option -i