O Bash não está encontrando um programa, mesmo que esteja no meu caminho


26

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 o executo apenas com seu nome.

Basicamente, quero entender como a saída abaixo é possível e como corrigi-la para que meu programa possa realmente 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 fins desta pergunta, pois estou interessado apenas em saber se o programa pode ou não ser encontrado e invocado.

Respostas:


38

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 no seu caminho. Nesse caso, há detalhes de que 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 refazer manualmente o caminho do cerco da seguinte maneira:

hash siege

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

hash -r

0

Outra causa desse problema pode ser que o caminho para o próprio executável esteja no caminho, em vez do diretório que contém o executável .

Então, ao invés de colocar

/home/myDir/theExecutable

no caminho, basta adicionar este

/home/myDir
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.