27

I'm running zsh 5.1.1 on Ubuntu 16.04. It seems that ~/.zprofile isn't sourced at login nor new terminal. ~/.zshrc is sourced however.

I am running oh-my-zsh.

Any ideas on why this is or how I can fix it?

joedborg
  • 389

3 Answers3

42

~/.zprofile is only sourced when zsh is run as login shell, e.g. when logging in on the console or via SSH.

It will not be sourced by zsh when opening a new terminal or starting a new zsh session from within a running session. Anything you need in all interactive sessions, should be set in ~/.zshrc. Anything you need in all zsh sessions, including scripts, should be set in ~/.zshenv.

You can find additional information in the zshall manpage and on this site.

~/.zshprofile will (usually) also not be parsed by any other tools. So any environment variables set in ~/.zprofile will usually not be available in an X11 session. If you need some environment variable to be available globally in your session, you might want to have a look at man pam_env.

Adaephon
  • 673
5

I had the same issue and found out that while ~/.zprofile seems to be ignored, ~/.profile still gets sourced. Not sure why this is the case, but simply moving things from .zprofile to .profile solved the problem for me...

luator
  • 151
1

I encountered this issue when switching to a different TTY and logging in. I fixed it by doing a manual check.

At the end of your profile, add export PROFILE_SOURCED=1

At the very top of your .zshrc, add

# Fix for unreliable profile sourcing, eg. switching to a second TTY
if [[ -z "$PROFILE_SOURCED" ]]; then
    source ~/.profile
fi
Brooks
  • 11
  • 1