Eu instalei algum programa (xlsx2csv) usando pip3. O executável do software está em ~/.local/bin
. My $PATH
é definido ~/.profile
assim:
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
echo $PATH
/home/bruni/bin:/home/bruni/.local/bin:/home/bruni/bin:/home/bruni/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
As permissões no executável parecem ok:
bruni@bruni-Inspiron-5547:~/.local/bin$ ls -l
total 44
-rwxrwxr-x 1 bruni bruni 42501 Jul 2 12:39 xlsx2csv
bruni@bruni-Inspiron-5547:~/.local/bin$ type -a xlsx2csv
xlsx2csv is /home/bruni/.local/bin/xlsx2csv
xlsx2csv is /home/bruni/.local/bin/xlsx2csv
No entanto, não posso invocar o software instalado sem especificar o caminho exato.
:~$ xlsx2csv
-bash: /usr/bin/xlsx2csv: No such file or directory
Então você tem o executável
xlsx2csv
em sua~/.local/bin
pasta, que é adicionado à$PATH
variável corretamente (até duas vezes, o que deve ser corrigido, mas não é crítico).Ele é corretamente reconhecido como executável lá, como podemos ver na saída de
type -a xlsx2csv
, que nos lista todos os tipos/locais do comando fornecido (pode ser, por exemplo, shell embutido/função/alias ou arquivo executável - tipohelp type
para mais informações).No entanto, Bash acredita que pode ser encontrado como
/usr/bin/xlsx2csv
, como você vê no erro ao tentar invocá-lo.Isso é resultado do Bash (e outros shells) usando uma tabela de hash interna para acelerar as pesquisas de comando. Provavelmente, a entrada errada está lá porque você tinha um executável nesse local anteriormente e o executou, mas ele foi movido ou desinstalado e reinstalado no outro local.
Normalmente o Bash redefine sua tabela de hash quando há eventos que obviamente a invalidam, como quando você altera a
$PATH
variável. Obviamente, ele não reconheceu seu procedimento de reinstalação, mas podemos redefini-lo manualmente:Este comando acima redefine a tabela de hash de comando do Bash e limpa todas as entradas de localização de comando em cache, forçando-o a fazer uma pesquisa regular na
$PATH
próxima vez que você digitar qualquer comando. Você pode ver a tabela de hash atual apenas digitandohash
. Para obter mais informações, leia a ajuda digitandohelp hash
. Você também pode visitar Qual é a finalidade do comando hash? (Unix e Linux SE) para obter mais informações sobre o hash de localização de comando do Bash.