Bash não está encontrando um programa, embora esteja no meu caminho

24

Eu tenho um programa no meu caminho. O programa é executado quando executado com um caminho completo especificado. Mas o programa não pode ser encontrado quando eu o executo apenas com seu nome.

Essencialmente, quero entender como a saída abaixo é possível e como corrigi-la para que meu programa possa ser encontrado sem um caminho completo especificado:

root:/usr/local/bin# ./siege
****************************************************
siege: could not open /usr/local/bin/etc/siegerc
run 'siege.config' to generate a new .siegerc file
****************************************************
root:/usr/local/bin# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory
root:/usr/local/bin# wtf!?!?

Estou no Ubuntu 12.04 usando o bash. Observe também que a saída de aviso do cerco não é relevante para os propósitos desta questão, pois só estou interessado em saber se o programa pode ou não ser encontrado e invocado.

    
por Jonah 14.07.2013 / 18:03

2 respostas

35

Observe a saída aqui:

root:/usr/local/bin# siege
bash: /usr/bin/siege: No such file or directory

O Bash mantém um hash interno de executáveis encontrados anteriormente em seu caminho. Nesse caso, há detalhes de que uma vez houve um executável em / usr / bin / siege e reutiliza esse caminho para evitar a necessidade de pesquisar novamente. Você precisa dizer ao bash para reescrever manualmente o caminho para o cerco da seguinte forma:

hash siege

Você também pode limpar todos os locais com hash:

hash -r
    
por 14.07.2013 / 18:09
0

Outra causa desse problema pode ser que o caminho para o executável em si esteja no caminho, em vez do diretório do executável .

Então, ao invés de colocar

/home/myDir/theExecutable

no caminho, apenas adicione isto

/home/myDir
    
por 29.02.2016 / 18:40

Tags