Chcę uruchomić program ds9
z terminala. Program jest wyraźnie w ŚCIEŻCE, którą ustaliłem, uruchamiając:
which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9
Ale gdy uruchamiam polecenie, wpisując ds9
, pokazuje mi następujący błąd:
-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory
Nadal mogę wykonać go poprawnie, jeśli użyję pełnej ścieżki w następujący sposób:
/Users/evgenii/miniconda3/envs/iraf/bin/ds9
Co się dzieje? Dlaczego próbuje się uruchomić /Applications/ds9.app
?
Uprawnienia są następujące:
-rwxrwxr-x@ 1 evgenii staff 18613852 9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9
Aktualizacja:
Oto wynik działania type -a ds9
polecenia:
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
. Jest to program zewnętrzny, więc nie może powiedzieć o aliasach powłoki.PATH
raczej niżalias
itype
zamiast niżwhich
.Odpowiedzi:
Polecenie jest najwyraźniej aliasowane do uszkodzonego aliasu. Po pierwsze, sprawdź, czy wszystkie mecze na
ds9
wPATH
zmiennej środowiskowej, wykonując następujące polecenia:type -a ds9
Zgodnie z zaktualizowanym pytaniem z danych wyjściowych
type -a ds9
polecenia wynika, że alias zasłania rzeczywiste polecenie.Aby wykonać rzeczywiste polecenie, ignorując alias i nie określając pełnej ścieżki,
\
przed poleceniem wstaw znak (odwrotny ukośnik). To ignoruje dowolny alias zdefiniowany przez bash.Jeśli nie chcesz za każdym razem wstawiać ukośnika odwrotnego przed poleceniem, dowiedz się, gdzie tworzony jest alias, albo usuń go, albo zastąp alias rzeczywistą komendą.
źródło
ds9
Definicja aliasu jest najprawdopodobniej w~/.bashrc
i powinny być tam usuwany (bo to zła metoda prowadzi do tego rodzaju problemu).grep ds9 ~/.bashrc
potwierdzi to.Widzę, że zostało to rozwiązane dla pytającego, ale dla przyszłych czytelników chcę wspomnieć, że może się zdarzyć, że polecenie zostanie zaszyfrowane, a następnie plik zostanie usunięty. (Zobacz
help hash
informacje.)type -a commandname
nie pokaże ci tego, tylkotype commandname
będzie.W takim przypadku
hash -d ds9
wystarczyłoby wszystko.źródło