Ich möchte ein Programm ds9
vom 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 ds9
Befehls:
type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9
which
. Es ist ein externes Programm, daher kann es nichts über Shell-Aliase erzählen.PATH
lieber alsalias
undtype
nicht alswhich
.Antworten:
Der Befehl ist anscheinend auf einen fehlerhaften Alias ausgerichtet. Überprüfen Sie zunächst alle Übereinstimmungen
ds9
in derPATH
Umgebungsvariablen, indem Sie den folgenden Befehl ausführen:type -a ds9
Wie aus Ihrer aktualisierten Frage hervorgeht, geht aus der Ausgabe des
type -a ds9
Befehls 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.
quelle
ds9
Alias-Definition befindet sich höchstwahrscheinlich in~/.bashrc
und sollte dort entfernt werden (da dies eine schlechte Methode ist, die zu dieser Art von Problem führt).grep ds9 ~/.bashrc
wird es bestätigen.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 hash
für Informationen.)type -a commandname
wird dir das nicht zeigen, nurtype commandname
wird.In diesem Fall
hash -d ds9
wäre alles, was benötigt würde.quelle