Não é possível executar um programa específico do Terminal sem usar o caminho completo

9

Eu quero executar um programa ds9no Terminal. O programa está claramente no PATH, que eu determinei executando:

which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9

Mas quando executo o comando digitando ds9, ele me mostra o seguinte erro:

-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory

Ainda posso executá-lo bem se usar o caminho completo da seguinte maneira:

/Users/evgenii/miniconda3/envs/iraf/bin/ds9

O que está acontecendo? Por que ele está tentando correr /Applications/ds9.app?

As permissões são as seguintes:

-rwxrwxr-x@ 1 evgenii  staff  18613852  9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9

Atualizar:

Aqui está a saída do type -a ds9comando running :

type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9
Evgenii
fonte
4
Não use which. É um programa externo, portanto, não pode contar sobre aliases de shell.
Barmar 9/01/19
Receita para trabalhar com comandos: use em PATHvez de aliase em typevez de which.
dan

Respostas:

19

O comando aparentemente está com um alias quebrado. Primeiro, verifique todas as correspondências ds9na PATHvariável de ambiente executando o seguinte comando:

type -a ds9

De acordo com sua pergunta atualizada, é aparente na saída do type -a ds9comando que um alias está sombreando o comando real.

Para executar o comando real ignorando o alias e sem especificar o caminho completo, adicione um \caractere (barra invertida) antes do comando. Isso ignora qualquer alias definido pelo bash.

Se você não desejar anexar sempre a barra invertida antes do comando, descubra onde o alias está sendo criado e remova-o ou substitua-o pelo comando real.

Nimesh Neema
fonte
11
A ds9definição de alias provavelmente está presente ~/.bashrce deve ser removida (porque é um método ruim que leva a esse tipo de problema). grep ds9 ~/.bashrcirá confirmar.
dan
4

Vejo que isso foi resolvido para o solicitante, mas para futuros leitores, quero mencionar que também pode ser que o comando tenha sido hash e, em seguida, o arquivo removido. (Veja help hashpara informações.)

type -a commandnamenão vai te mostrar isso, só type commandnamevai.

Nesse caso, hash -d ds9seria tudo o que seria necessário.

Curinga
fonte