Created
March 4, 2016 16:38
-
-
Save bagonyi/6ea345a7eb3ad5545272 to your computer and use it in GitHub Desktop.
OS X El Capitan ZSH order of PATH set in .zshenv is not respected
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
According to http://www.zsh.org/mla/users/2015/msg00727.html the order gets overwritten by path_helper. | |
If you move your $PATH settings from ~/.zshenv to ~/.zprofile path_helper won't override your PATH settings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
On 7/31/15 2:53 PM, Mikael Magnusson wrote: | |
On Fri, Jul 31, 2015 at 6:35 PM, Kurtis Rader <krader@xxxxxxxxxxxxx> wrote: | |
A public service announcement for those running Zsh on Mac OS X. | |
Upgrading to El Capitan (OS X 10.11) will install a /etc/zprofile that | |
contains | |
# system-wide environment settings for zsh(1) | |
if [ -x /usr/libexec/path_helper ]; then | |
eval `/usr/libexec/path_helper -s` | |
fi | |
On a new login shell that will be sourced after your $HOME/.zshenv. If you | |
set your $PATH in your .zshenv the /usr/libexec/path_helper program will | |
alter the order of the directories. The order appears random so it's | |
probably using a hashed set to avoid having the same directory appear more | |
than once in the result. | |
You can't remove /usr/libexec/path_helper due to the new security | |
mechanisms (at least not without booting from a recovery disk) but you can | |
remove /etc/zprofile which is what I did to keep my $PATH from being mucked | |
with. | |
That's good news, they used to have that code in /etc/zshenv which | |
meant you had _no_ way to override it. It only took them a few years | |
to fix this. | |
As a sidenote, it's not a great idea to set your path in .zshenv, you | |
should probably move those settings to your .zprofile. (Otherwise, | |
running a script that uses zsh will not use the $PATH from the | |
environment, which can break things in some situations). | |
I suspect the order of entries in path_helper is determined by alphabetical ordering of the filenames in /etc/paths.d, where path_helper locates the files that come after the default system paths. That "40-" in XQuartz looks like an rcdir-style technique to enforce ordering, and I think the XQuartz folks know what they're doing with the OS X system stuff. (This is on 10.9.) | |
$ ls -l /etc/paths.d | |
total 16 | |
-rw-r--r-- 1 root wheel 13 Aug 11 2014 40-XQuartz | |
-rw-r--r-- 1 root wheel 12 May 7 21:06 TeX | |
Playing around with this seems to support that theory. Files read in order, duplicate entries removed after the first occurrence. | |
#/bin/sh | |
# install-hello-paths - script to test path_helper behavior | |
echo /hello/world > /etc/paths.d/01-hello | |
echo /hello/world > /etc/paths.d/99-hello | |
One other El Capitan change: the system-supplied zsh (5.0.8) appears to be compiled with /usr/local/share/zsh/site-functions in the default $fpath, which was not the case for earlier versions of OS X. This is probably related to the "rootless" stuff that locks down /usr outside /usr/local/. | |
Cheers, | |
Andrew |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment