Quando executo um programa sem especificar o caminho completo para o executável, e o Bash deve pesquisar os diretórios $PATH
para encontrar o binário, parece que o Bash se lembra do caminho em algum tipo de cache. Por exemplo, instalei uma compilação do Subversion da fonte para /usr/local
e digitei svnsync help
no prompt do Bash. Bash localizou o binário /usr/local/bin/svnsync
para "svnsync" e o executou. Então, quando eu excluí a instalação do Subversion /usr/local
e a executei novamente svnsync help
, o Bash respondeu:
bash: /usr/local/bin/svnsync: No such file or directory
Mas, quando inicio uma nova instância do Bash, ele localiza e executa /usr/bin/svnsync
.
Como limpo o cache de caminhos para os executáveis?
bash
executable
cache
Daniel Trebbien
fonte
fonte
Respostas:
bash
armazena em cache o caminho completo para um comando. Você pode verificar se o comando que você está tentando executar possui um hash com otype
comando:Para limpar o cache inteiro:
Ou apenas uma entrada:
Para informações adicionais, consulte
help hash
eman bash
.fonte
csh
, o comando érehash
.rehash
comando acima também funciona parazsh
.hash svnsync
.Para limpar apenas uma entrada, você precisa de um sinalizador diferente:
O
-r
sinalizador não aceita um parâmetro e sempre exclui o cache inteiro.(Pelo menos no bash 3.2.39 no Debian Lenny)
fonte
Existem soluções não mencionadas aqui.
Você pode desativar o hash com
set +h
ouset +o hashall
help set
diz:Você pode verificar se existe um comando encontrado na tabela de hash antes de tentar executá-lo com
shopt -s checkhash
help shopt
diz:Você pode vincular NAME a PATH com
hash -p PATH NAME
ouBASH_CMDS[NAME]=PATH
:Magia:
PATH="$PATH"
executahash -r
De
variables.c
:Experimentar:
fonte
Como o usuário johntex observou em um comentário à resposta do usuário Tobu , a ação prática mais simples no Bash é refazer a tarefa apenas do seu programa:
Isso é tudo.
fonte