Estou tendo um comportamento estranho com zsh ( 5.4.2_1 instalado com homebrew ) no osx sem usar a primeira ocorrência de um executável no caminho.
Aqui está o cenário:
echo $PATH
retorna:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
bebida está em ambos
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
e
usr/local/bin/brew
Isso é confirmado executando which -a brew que retorna:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Mas quando executo qual bebida , ele retorna:
/usr/local/bin/brew
e a bebida corre /usr/local/bin/brew
em vez de/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Como isso pode acontecer quando a fermentação está no início do caminho?
Ajuda apreciada.
which -a cmd
procura todos os arquivos regulares nomeados para oscmd
quais você tem permissão de execução nos diretórios em$path
(além de aliases, funções, builtins...).Enquanto
which cmd
retorna o comando quezsh
seria executado (which
é um built-inzsh
como em,tcsh
mas diferente da maioria dos outros shells).zsh
, como a maioria dos outros shells, lembra os caminhos dos executáveis em umahash
tabela para não ter que procurá-los em todos os diretórios$path
sempre que você os invoca.Essa tabela de hash (exposta na
$commands
matriz associativa emzsh
) pode ser manipulada com ohash
comando (comando de shell POSIX padrão).Se você executou o
brew
comando (ouwhich/type/whence brew
, ou usou a conclusão do comando ou qualquer coisa que teria preparado esse hash/cache) antes de ser adicionado/usr/local/Cellar/zplug/HEAD-9fdb388/bin
ou antes/usr/local/Cellar/zplug/HEAD-9fdb388/bin
de ser adicionado a$path
,zsh
teria lembrado seu caminho e armazenado como$commands[brew]=/usr/local/bin/brew
.Nesse caso, você pode usar
hash -r
(como no shell Bourne) ourehash
(como no csh) parazsh
esquecer os comandos lembrados (invalidar esse cache ), para que ele possa procurá-lo na próxima vez e localizá-lo no novo local./usr/local/bin/brew
geralmente é um link simbólico.assim
/usr/local/bin/brew
e/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
são provavelmente os mesmos arquivos.
modelo:
confirmar.