Katalogi wyszukiwania terminali OSX

0

Pochodzę z korzystania z cygwin w systemie Windows i właśnie zacząłem używać Maca. Zastanawiam się, dlaczego wydaje się, że ścieżki wyszukiwania nie działają tak, jak powinny.

Jeśli mam program w /usr/bin/prog i usuwam to. Wydaje się, że wciąż próbuje tej dokładnej ścieżki zamiast szukać jej ponownie (powiedzmy, że przeniosłem ją na /usr/local/bin ).

Czy to z powodu aplikacji terminalowej, czy jest to coś specyficznego dla systemu Mac? Ponadto, jeśli chcę zainstalować nową wersję Pythona /usr/local/bin, to właściwy sposób, aby go usunąć /usr/bin/?

vonhogen
źródło

Odpowiedzi:

3

Nie mówisz, której powłoki używasz, chociaż twoje pytanie jest oznaczone tagiem bash. Domyślna powłoka Mac OS X to tcsh, który Jeśli używasz tcsh lub csh, buforują one tabelę elementów na twojej ścieżce. Aby odświeżyć tabelę, wydaj rehash polecenie po znaku powłoki.

Musisz to zrobić za każdym razem, gdy przenosisz lub usuniesz plik wykonywalny lub jeśli dodasz coś do swojej ścieżki.

Jeśli naprawdę używasz bash powłoka to nie ma zastosowania.

Eric
źródło
1
Domyślną powłoką Mac Os X nie jest tsch jego bash. (Kiedyś wrócił do wersji 10.2.x) Zmienił się po 10.3.x
ocodo
Ooooops ... Pomyślałem o tym później. Zmieniłem domyślną powłokę na tcsh tak dawno temu zapomniałem. Jednak zachowanie, które widzi verhogen, jest starannie wyjaśnione przez zachowanie tcsh / csh, które przeskoczyłem do tego wniosku
Eric
2

Terminal OS X wypróbuje ścieżki zadeklarowane w zmiennej PATH, w kolejności, aż znajdzie ją lub zabraknie miejsc do sprawdzenia. Możesz sprawdzić, jaka jest twoja zmienna PATH, wpisując następujące polecenie w wierszu polecenia:

echo $PATH

Możesz uruchomić następujące polecenie z wiersza polecenia, aby zobaczyć, gdzie Twoja powłoka znajduje dany program:

which prog

Jeśli chcesz uaktualnić Pythona, polecam zainstalowanie go w tej samej lokalizacji, w której już istnieje. Jeśli chcesz mieć więcej niż jedną wersję zainstalowaną na swoim komputerze na raz, to zainstalowanie jej w / usr / local / bin byłoby logicznym wyborem IMO.

YWCA Hello
źródło
To powinno się zdarzyć, ale jeśli uciekasz git, a następnie usuń go z usr/bin, wydaje się, że nie wyszukuje ponownie. Po prostu próbuje uciekać /usr/bin/git.
vonhogen
Spróbuj w nowej powłoce, aby sprawdzić, czy nie została buforowana. Możesz również użyć printenv, aby sprawdzić, czy w twoim środowisku dzieje się coś dziwnego
0

Z tego, co rozumiem, gdy wykonujesz program, przeszuka foldery na twojej zmiennej $ PATH, która jest oddzielona przez „:” np.

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin

Czy twój $ PATH jest skonfigurowany poprawnie? Aby to sprawdzić, użyj:

echo $PATH

Możesz także użyć który python, aby znaleźć wersję i skąd jest uruchomiony. Sądzę, że jest to również wyszukiwanie od lewej do prawej, więc zajmie on pierwszy program o nazwie python, który znajdzie na ścieżce.

Jim
źródło
0

Zamiast używać

which prog

możesz użyć wbudowanego Basha

type -P prog

# some examples using: type -P cmd
$(type -P prog) arg1 arg2 arg3 ...
myls=$(type -P ls) && $myls -l

Aby uzyskać więcej informacji, zobacz

help type

# The -P flag forces a PATH search for each NAME, even if it is an alias,
# builtin, or function, and returns the name of the disk file that would
# be executed.

Jeszcze inną opcją może być próba

help command
command -p prog

HTH


źródło