O executável do programa instalado é executado a partir do local errado

4

Instalei parcellite no Ubuntu (baixado do link )

Depois de instalar a partir de fontes, sudo make install , posso ver que está instalado na localização abaixo.

No entanto, quando tento executá-lo, ele tenta executá-lo de outro caminho. Por que isso?

user$ which parcellite
/usr/local/bin/parcellite

user$ parcellite -h
bash: /usr/bin/parcellite: No such file or directory

$PATH é como abaixo

/home/user/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Eu tentei alterar a propriedade do executável da seguinte maneira. Ainda assim, o problema persiste.

user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 root root 452K Oct  7 21:00 /usr/local/bin/parcellite
user$sudo chown user:user /usr/local/bin/parcellite
user$ ls -l /usr/local/bin/parcellite 
-rwxr-xr-x 1 user user 452K Oct  7 21:01 /usr/local/bin/parcellite

Eu tinha uma versão antiga do parcellite instalado. Mas eu removi antes de instalar a nova versão.

Atualização: a solução da Fox funciona. Mas alguma idéia por que o comando which fornece o caminho correto, apesar de hash NÃO ser atualizado?

    
por Roger That 09.10.2018 / 05:37

1 resposta

5

Se você tinha uma versão instalada, então instalou outra versão em outro lugar, então seu shell terá em cache (com hash) o caminho original. Você pode limpar esse cache com hash -r . Então, da próxima vez que você executar o comando, ele será reescrito com o novo caminho.

Note que este cache não é global, se você tem vários shells em execução, você terá que atualizar cada um deles.

Por que which vê o caminho correto, "Por que não usar which " é uma boa fonte de informação, mas a resposta curta é que which é um comando externo que não vê o cache de caminho do shell.

    
por 09.10.2018 / 05:46