O shell não consegue localizar o executável quando o nome duplicado é excluído do PATH?

3

Eu compilei um pacote chamado xxx.Agora eu deletei os arquivos relacionados com o xxx e instalei usando o repositório.Mas se eu digitar o comando [root]$ xxx , a seguinte mensagem está chegando

-bash: /usr/local/bin/xxx: No such file or directory

e se eu tentar, [root]$/usr/bin/xxx -v Está funcionando. Onde eu quero mudar o local de instalação.Ou eu quero criar um link simbólico em /usr/bin/ , que aponta para /usr/local/bin/xxx

    
por Abdul Shajin 23.09.2011 / 01:05

2 respostas

4

Para acelerar as pesquisas de nomes de caminho, o shell mantém um cache interno mapeando os nomes abreviados dos comandos para o nome completo do caminho. Isso é provavelmente o que você está experimentando aqui.

Você pode emitir o seguinte comando para inspecionar o caminho atual armazenado em cache do programa:

hash -t xxx

Isso estará apontando para o executável ausente. Você pode limpar o cache de um nome específico com o seguinte comando:

hash -r xxx

Observe que esse problema afetará apenas as sessões de shell que executaram o comando no local antigo. Qualquer nova sessão de shell deve ter um cache de pesquisa claro e encontrar o comando conforme o esperado.

    
por James Henstridge 23.09.2011 / 03:07
2

Não, você não quer fazer nada disso. Deixe-me explicar porquê:

/usr/bin é onde os aplicativos do repositório estão instalados. /usr/local/bin é onde seus aplicativos compilados são instalados por padrão.

Quando você make && make install de um aplicativo, você precisará substituir o aplicativo de repositório, portanto /usr/local/bin já está no seu $PATH e precede /usr/bin , portanto ele é executado primeiro.

se você digitar which xxx , ele ainda renderá /usr/local/bin/xxx , pois ainda está lá onde você o instalou. Emitir rm $(which xxx) ou melhor ainda, compilar o aplicativo novamente, mas desta vez emitir make uninstall como root.

    
por aquaherd 23.09.2011 / 01:38