Por que o which e whereis fornecem locais diferentes e como posso preferir um caminho ao outro? [duplicado]

2

Eu recentemente compilei e instalei o diffutils-3.3, pois precisava da opção --no-dereference que não está disponível na versão do diff incluída. Depois de configure , make , make check , make clean e install , a nova versão 3.3 do diff foi instalada em /usr/local/bin .

A execução de diff --version resultou nos mesmos 3,2 que antes da instalação.

Os comandos

e seus resultados seguem:

$ which diff
/usr/local/bin/diff

$ whereis -b diff
diff: /usr/bin/diff /usr/bin/X11/diff /usr/local/bin/diff

$ echo $PATH
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Usando caminhos completos, posso confirmar que a versão 3.3 do diff está em /usr/local/bin e a versão 3.2 está em /usr/bin .

Olhando o caminho, eu esperaria que, como /usr/local/bin aparece primeiro, esse diff específico deve ser executado quando eu chamar diff sem um caminho. Claramente, este não é o caso. Minha pergunta é por que e o que posso fazer para obter o resultado desejado?

Nota: Ubuntu 12.04.5

$ uname -a
Linux me-AOD270 3.2.0-80-generic #116-Ubuntu SMP Mon Mar 23 17:11:32 UTC 2015 i686 i686 i386 GNU/Linux
    
por Elder Geek 25.04.2015 / 04:33

1 resposta

1

A causa deste problema foram entradas em cache (hash) na tabela de consulta do bash. bash hashes de caminhos de comando para evitar pesquisas caras.

Meus agradecimentos ao @muru por me apontar na direção certa. O que eu fiz para resolver o problema foi usar o comando export $PATH$ que funcionou para mim.

Pesquisas adicionais indicam que você pode descobrir se o caminho está em cache (hash) usando o comando type - type diff (no meu caso) que retorna o caminho completo do comando semelhante a diff is /usr/bin/diff

Você pode adotar a abordagem cirúrgica e remover o cache (hash) de um único comando com o comando hash -d *command* ou, no meu caso, hash -d diff , que informa o sucesso com a saída de bash: hash: diff: not found

você também pode adotar a abordagem menos elegante e bem-sucedida de despejar toda a tabela de cache (hash) com hash -r , que nada informa.

Fontes:

Experiência

Como livra-se de -bash: / usr / {package}: Nenhum arquivo ou diretório

link

    
por Elder Geek 08.06.2015 / 15:16