Ścieżka nie jest honorowana?

0

Mam w swoim .bash_profile:

$ cat ~/.bash_profile 
# Prompt
export PS1="\h:\W$ "

# Standard path
export PATH="/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:
/opt/local/bin:/opt/local/sbin"

# Android
export ANDROID_NDK_ROOT=/opt/android-ndk
export ANDROID_SDK_ROOT=/opt/android-sdk
export JAVA_HOME=`/usr/libexec/java_home`
export ANDROID_HOME="$HOME/.android"

export PATH="$PATH:$ANDROID_SDK_ROOT/tools/":"$ANDROID_SDK_ROOT/platform-tools/"

Ścieżkę zweryfikowałem za pomocą:

$ echo $PATH
/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/opt/local/bin:
/opt/local/sbin:/opt/android-sdk/tools/:/opt/android-sdk/platform-tools/

Moja lokalna wersja Emacsa jest już dostępna /usr/local/bin. Właśnie go zbudowałem i zainstalowałem:

$ which emacs
/usr/local/bin/emacs

Kiedy uruchamiam Emacsa, otrzymuję ten od /usr/bin:

$ emacs --version
GNU Emacs 22.1.1
...
$ /usr/bin/emacs --version
GNU Emacs 22.1.1
...
$ /usr/local/bin/emacs --version
GNU Emacs 24.5.1
...

Dlaczego mam problemy ze ścieżkami? Dlaczego OS X je ignoruje? Jak mogę użyć mojej kopii Emacsa bez podawania pełnej ścieżki?/usr/local/bin/emacs


źródło
Czy po otwarciu nowej karty terminalu problem nadal występuje?
nohillside

Odpowiedzi:

0

Aby zmienić ŚCIEŻKĘ, aby /usr/local/bin wyprzedzić, /usr/binwykonaj następujące czynności:

  1. wykonać . ~/.bash_profile
  2. wykonać PATH="/usr/local/bin:$PATH"w bieżącej powłoce
  3. uruchom ponownie Terminal

Możesz także chcieć wprowadzić zmiany, /etc/pathstak aby były /usr/local/binwymienione wcześniej /usr/bin. Aby to zrobić, musisz sudo swojego edytora.

sudo open -t /etc/paths

Pamiętaj, że jeśli edytujesz, /etc/pathsistnieje ryzyko, że aplikacje nieterminalne mogą pobrać twoją lokalnie zbudowaną wersję. Po prostu dla ciebie.

Trochę więcej informacji na temat ścieżek.

  1. /bin(i /sbin) były przeznaczone dla programów, które musiały znajdować się na małej /partycji przed /usrzamontowaniem większych itp. Obecnie służy głównie jako standardowa lokalizacja dla takich kluczowych programów /bin/sh, chociaż pierwotne zamiary mogą być nadal istotne np. W przypadku instalacji na małych urządzeniach wbudowanych.

  2. /sbin, w odróżnieniu od /bin, dotyczy programów do zarządzania systemem (zwykle nie używanych przez zwykłych użytkowników) potrzebnych przed /usrzamontowaniem.

  3. /usr/bin jest przeznaczony dla normalnych programów użytkownika zarządzanych przez dystrybucję.

  4. Istnieje /usr/sbintaki sam związek z tym, /usr/binco /sbinmusi /bin.

  5. /usr/local/binjest dla zwykłych programów użytkownika nie zarządzanych przez menedżera pakietów dystrybucyjnych, np. pakietów skompilowanych lokalnie. Nie należy ich instalować, /usr/binponieważ przyszłe aktualizacje dystrybucji mogą je modyfikować lub usuwać bez ostrzeżenia.

  6. /usr/local/sbin, Jak można się domyślić w tym momencie, to /usr/local/binjak /usr/sbinsię /usr/bin.

To źródło pomaga objaśnić standard hierarchii systemu plików na głębszym poziomie.

I możesz znaleźć ten artykuł na temat używania i nadużywania/usr/local/bin interesujących.

Denis Rasulev
źródło
OP miał już /usr/local/binna początku PATH…
nohillside
Tak, dziękuję, też to zauważyłem. Można (lub nie) chcieć pominąć polecenie według woli. BTW, kto jest OP? :)
Denis Rasulev
Oryginalny plakat :-) BTW, nawet nie zdawałem sobie sprawy, że ludzie używają świętych wojen /usr/local.
nohillside
0

Odkryłem, że muszę ponownie uruchomić komputer, aby zmiany zostały wprowadzone. Wylogowanie / logowanie mogło mieć ten sam efekt, ale go nie próbowałem.


źródło
Jeśli wyczyściłeś tablicę skrótów, wywołano by nowe emacs. Nie musisz wylogowywać się ani restartować.
fd0
@ fd0 - Wybacz moją niewiedzę ... O jakim stole mieszającym mówisz? Co to ma wspólnego ze ścieżką lub programem?
Tabela skrótów jest funkcją powłoki, która rejestruje pełną ścieżkę polecenia do pamięci po wyszukiwaniu PATH. Kolejne wywołania polecenia są najpierw sprawdzane w tabeli skrótów, zamiast konieczności korzystania z wyszukiwania PATH. Więcej informacji można znaleźć w poleceniu help hash.
fd0