Nie można uruchomić jednego konkretnego programu z terminala bez użycia pełnej ścieżki

9

Chcę uruchomić program ds9z 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 ds9polecenia:

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
źródło
4
Nie używać which. Jest to program zewnętrzny, więc nie może powiedzieć o aliasach powłoki.
Barmar
Odbiór do pracy z poleceniami: używaj PATHraczej niż aliasi typezamiast niż which.
dan

Odpowiedzi:

19

Polecenie jest najwyraźniej aliasowane do uszkodzonego aliasu. Po pierwsze, sprawdź, czy wszystkie mecze na ds9w PATHzmiennej środowiskowej, wykonując następujące polecenia:

type -a ds9

Zgodnie z zaktualizowanym pytaniem z danych wyjściowych type -a ds9polecenia 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ą.

Nimesh Neema
źródło
1
ds9Definicja aliasu jest najprawdopodobniej w ~/.bashrci powinny być tam usuwany (bo to zła metoda prowadzi do tego rodzaju problemu). grep ds9 ~/.bashrcpotwierdzi to.
dan
4

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 hashinformacje.)

type -a commandnamenie pokaże ci tego, tylko type commandnamebędzie.

W takim przypadku hash -d ds9wystarczyłoby wszystko.

Dzika karta
źródło