Impossible d'exécuter un programme particulier à partir de Terminal sans utiliser son chemin complet

9

Je veux exécuter un programme à ds9partir du terminal. Le programme est clairement dans le PATH, que j'ai déterminé en exécutant:

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

Mais lorsque j'exécute la commande en tapant ds9, cela me montre l'erreur suivante:

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

Je peux toujours l'exécuter correctement si j'utilise le chemin complet comme suit:

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

Que se passe-t-il? Pourquoi essaie-t-il de courir /Applications/ds9.app?

Les autorisations sont les suivantes:

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

Mise à jour:

Voici la sortie de la type -a ds9commande en cours d'exécution :

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
la source
4
Ne pas utiliser which. C'est un programme externe, donc il ne peut pas parler des alias de shell.
Barmar
Recette pour travailler avec des commandes: utilisez PATHplutôt que aliaset typeplutôt que which.
dan

Réponses:

19

La commande est apparemment aliasée à un alias cassé. Tout d' abord, vérifier pour tous les matches pour ds9en PATHvariable d'environnement, en exécutant la commande suivante:

type -a ds9

Selon votre question mise à jour, il ressort de la sortie de la type -a ds9commande, qu'un alias suit la commande réelle.

Pour exécuter la commande réelle en ignorant l'alias et sans spécifier le chemin d'accès complet, ajoutez un caractère \(barre oblique inverse) avant la commande. Cela ignore tout alias défini par bash.

Si vous ne souhaitez pas ajouter la barre oblique inverse avant la commande à chaque fois, déterminez où l'alias est créé et supprimez-le ou remplacez l'alias par la commande réelle.

Nimesh Neema
la source
1
La ds9définition d'alias est très probablement dans ~/.bashrcet devrait y être supprimée (car c'est une mauvaise méthode conduisant à ce genre de problème). grep ds9 ~/.bashrcle confirmera.
dan
4

Je vois que cela a été résolu pour le demandeur, mais pour les futurs lecteurs, je tiens à mentionner que cela pourrait également être le cas si la commande a été hachée puis le fichier supprimé. (Voir help hashpour info.)

type -a commandnamene vous le montrera pas, seulement type commandname.

Dans ce cas, ce hash -d ds9serait tout ce qui serait nécessaire.

Caractère générique
la source