zsh problems MacOS High Sierra

Joshua Root jmr at macports.org
Tue May 3 09:00:03 UTC 2022


Ryan Schmidt wrote:

> On May 2, 2022, at 23:49, Sriranga Veeraraghavan wrote:
>
> >/I am not a zsh user, but according to zsh's documentation, 
> ~/.zprofile is run only when zsh is used as a login shell, whereas 
> ~/.zshenv is read for nearly every instance of zsh (including scripts): />//>/https://zsh.sourceforge.io/Guide/zshguide02.html#l9 />//>/Because of this, it is possible that if /opt/local/bin, etc., are 
> only added to PATH in ~/.zprofile, then in some instances zsh would 
> use the Apple standard programs in /bin, /sbin, /usr/bin, etc., while 
> in other instances zsh would use, for example, the MacPorts versions 
> in /opt/local/bin, etc. This might lead to inconsistencies or hard to 
> detect bugs in shell scripts, etc. /
> MacPorts has been modifying ~/.zprofile when the shell is zsh ever since zsh support was added to MacPorts 2.5 years ago. If it is a problem, nobody has reported it so far.
>
> https://github.com/macports/macports-base/commit/f9a3b2d5bcc27a1a279184c496a095f31b5d85a2
>
> All shells on macOS are login shells.

Not all shells are login shells, but non-login shells are commonly child 
processes of a login shell that already executed the startup files. So 
non-login shells will usually inherit any variables exported in 
zprofile. Also, any shell can (and often does) run another shell. That 
means that all code in zshenv and zshrc needs to behave correctly when 
executed multiple times. Unconditionally appending to PATH will result 
in the value being added multiple times, once per "layer" of shell. So 
that's one reason why we don't use zshenv.

The other is that Apple's /etc/zprofile overwrites PATH, so any changes 
made to it before that file is read don't stick.

- Josh



More information about the macports-users mailing list