No se puede ejecutar un programa en particular desde la Terminal sin usar su ruta completa

9

Quiero ejecutar un programa ds9desde la Terminal. El programa está claramente en la RUTA, que determiné ejecutando:

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

Pero cuando ejecuto el comando escribiendo ds9, me muestra el siguiente error:

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

Todavía puedo ejecutarlo bien si uso la ruta completa de la siguiente manera:

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

¿Que esta pasando? ¿Por qué está tratando de correr /Applications/ds9.app?

Los permisos son los siguientes:

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

Actualizar:

Aquí está la salida del type -a ds9comando en ejecución :

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
fuente
44
No utilice which. Es un programa externo, por lo que no puede contar sobre alias de shell.
Barmar
Receipe para trabajar con comandos: use en PATHlugar de aliasy en typelugar de which.
dan

Respuestas:

19

El comando aparentemente tiene un alias en un alias roto. En primer lugar, la verificación de todos los partidos para ds9en PATHla variable de entorno, mediante la ejecución del siguiente comando:

type -a ds9

Según su pregunta actualizada, se desprende del resultado del type -a ds9comando que un alias está sombreando el comando real.

Para ejecutar el comando real ignorando el alias y sin especificar la ruta completa, anteponga un carácter \(barra invertida) antes del comando. Esto ignora cualquier alias definido por bash.

Si no desea anteponer la barra diagonal inversa antes del comando cada vez, averigüe dónde se está creando el alias y elimínelo o anule el alias con el comando real.

Nimesh Neema
fuente
1
La ds9definición de alias es muy probable ~/.bashrcy debe eliminarse allí (porque es un mal método que conduce a este tipo de problema). grep ds9 ~/.bashrclo confirmará
dan
4

Veo que esto se resolvió para el autor de la pregunta, pero para los futuros lectores, quiero mencionar que también podría ser el caso de que el comando se haya modificado y luego se elimine el archivo. (Ver help hashpara información).

type -a commandnameno te mostrará eso, solo lo type commandnamehará.

En este caso, hash -d ds9sería todo lo que se necesitaría.

Comodín
fuente