Ein bestimmtes Programm kann nicht vom Terminal ausgeführt werden, ohne den vollständigen Pfad zu verwenden

9

Ich möchte ein Programm ds9vom Terminal aus ausführen . Das Programm befindet sich eindeutig im PFAD, den ich durch Ausführen bestimmt habe:

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

Wenn ich den Befehl jedoch durch Eingabe ausführe ds9, wird der folgende Fehler angezeigt:

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

Ich kann es immer noch gut ausführen, wenn ich den vollständigen Pfad wie folgt verwende:

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

Was ist los? Warum versucht es zu rennen /Applications/ds9.app?

Die Berechtigungen lauten wie folgt:

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

Aktualisieren:

Hier ist die Ausgabe des laufenden type -a ds9Befehls:

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
quelle
4
Nicht benutzen which. Es ist ein externes Programm, daher kann es nichts über Shell-Aliase erzählen.
Barmar
Rezept für die Arbeit mit Befehlen: Verwenden Sie PATHlieber als aliasund typenicht als which.
Dan

Antworten:

19

Der Befehl ist anscheinend auf einen fehlerhaften Alias ​​ausgerichtet. Überprüfen Sie zunächst alle Übereinstimmungen ds9in der PATHUmgebungsvariablen, indem Sie den folgenden Befehl ausführen:

type -a ds9

Wie aus Ihrer aktualisierten Frage hervorgeht, geht aus der Ausgabe des type -a ds9Befehls hervor, dass ein Alias ​​den tatsächlichen Befehl überschattet.

Um den eigentlichen Befehl durch Ignorieren des Alias ​​und ohne Angabe des vollständigen Pfads auszuführen, stellen Sie dem Befehl ein \(Backslash-) Zeichen voran . Dies ignoriert alle von Bash definierten Alias.

Wenn Sie den Backslash nicht jedes Mal vor dem Befehl voranstellen möchten, müssen Sie herausfinden, wo der Alias ​​erstellt wird, und ihn entweder entfernen oder den Alias ​​mit dem eigentlichen Befehl überschreiben.

Nimesh Neema
quelle
1
Die ds9Alias-Definition befindet sich höchstwahrscheinlich in ~/.bashrcund sollte dort entfernt werden (da dies eine schlechte Methode ist, die zu dieser Art von Problem führt). grep ds9 ~/.bashrcwird es bestätigen.
Dan
4

Ich sehe, dass dies für den Fragesteller gelöst wurde, aber für zukünftige Leser möchte ich erwähnen, dass es auch der Fall sein kann, dass der Befehl gehasht und dann die Datei entfernt wurde. (Siehe help hashfür Informationen.)

type -a commandnamewird dir das nicht zeigen, nur type commandnamewird.

In diesem Fall hash -d ds9wäre alles, was benötigt würde.

Platzhalter
quelle