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