Eu literalmente acabei de ter uma batalha com isso hoje.
No OS X Yosemite, o PATH é construído de forma bastante indireta.
Eu acredito que, como cremefraiche diz, ZSH tem um $PATH
embutido que ele usa se nada mais estiver definido, mas não é de onde vem o seu. Primeiro de tudo existe um arquivo, /etc/paths
, que contém uma lista de diretórios. Há também um diretório, /etc/path.d
, que contém mais arquivos que contêm diretórios. O programa /usr/libexec/path_helper
pega essas listas de diretórios, mescla-as com a variável $PATH
existente (se houver), remove quaisquer duplicatas e gera o resultado, com os diretórios /etc/paths
listados primeiro.
Você pode tentar executá-lo sozinho, não faz mal algum. Aqui está a saída da minha:
$ /usr/libexec/path_helper
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/MacGPG2/bin:/Users/alan/.local/bin:/Users/alan/src/go/bin"; export PATH;
Por si só, isso não faz nada, mas é chamado de, na minha máquina, /etc/zprofile
:
if [ -x /usr/libexec/path_helper ]; then
eval '/usr/libexec/path_helper -s'
fi
Isso pode variar em sua máquina, pois parece que a Apple mudou esse código em algumas versões diferentes do OS X.
Aqui está a lista de todos os arquivos que o ZSH lê no OS X, na ordem em que são avaliados:
- / etc / zshenv
- ~ / .zshenv
- / etc / zprofile
- ~ / .zprofile
- / etc / zshrc
- ~ / .zshrc
- / etc / zlogin
- ~ / .zlogin
- ~ / .zlogout
- / etc / zlogout
Alguns desses arquivos não são avaliados em determinadas circunstâncias, como quando executados como scripts de shell não interativos, mas não vou discutir isso aqui. Está na página de manual do ZSH se você estiver interessado.
$ man zsh
Vale a pena notar que /etc/zprofile
é executado após ~/.zshenv
, portanto, se você seguir as diretrizes ZSH e definir seu $PATH
em .zshenv, ele provavelmente será prejudicado por path_helper
. Se você estiver com esse problema, talvez valha a pena renomear /etc/zprofile
as /etc/zshenv
, então o sistema $PATH
será definido o mais cedo possível.