Estou tendo algum comportamento estranho com o zsh (5.4.2_1 instalado com homebrew) no osx, não usando 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
fermentação está em ambos
/usr/local/Cellar/zplug/HEAD-9fdb388/bin
e
usr/local/bin/brew
Isso é confirmado executando o comando -a brew que retorna:
/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
/usr/local/bin/brew
Mas quando eu corro qual fermentação ela retorna:
/usr/local/bin/brew
e fermentação é executado em /usr/local/bin/brew
vez de/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
Como isso pode acontecer quando a fermentação está mais adiantada no caminho?
Ajuda apreciada.
rehash
e execute-os novamente - se isso ainda acontecer depois, edite isso em. #Respostas:
which -a cmd
procura por todos os arquivos regulares nomeados para oscmd
quais você tem permissão de execução nos diretórios$path
(além de aliases, funções, componentes internos ...).While
which cmd
retorna o comando quezsh
seria executado (which
é um componente internozsh
semelhante aotcsh
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 precisar procurá-los em todos os diretórios a$path
cada vez 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 tenha preparado esse hash / cache) antes de ter sido adicionado/usr/local/Cellar/zplug/HEAD-9fdb388/bin
ou/usr/local/Cellar/zplug/HEAD-9fdb388/bin
adicionado$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 procurar na próxima vez e encontrá-lo no novo local.fonte
$commands
não é$command
. Veja editar./usr/local/bin/brew
geralmente é um link simbólico.Então
/usr/local/bin/brew
e/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew
provavelmente são os mesmos arquivos.
tipo:
confirmar.
fonte