Zainstalowałem sqlite3 v3.8, ale terminal Mac nadal domyślnie uruchamia starą wersję 3.6


9

Mam komputer Mac z systemem OS X 10.6.8, który jest fabrycznie zainstalowany z SQLite3 v3.6. Zainstalowałem v3.8 za pomocą homebrew. Ale po wpisaniu „sqlite3” w moim terminalu nadal działa stara, wstępnie zainstalowana wersja. Jakaś pomoc?

Nie jestem pewien, czy zmienna PATH ma z tym coś wspólnego, ale uruchomienie echa $ PATH powoduje: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Nowa wersja SQLite3 znajduje się w następującym katalogu: / usr / local / Cellar / sqlite

Powinienem dodać, że pobrałem również binarny plik wykonywalny na pulpit, i to działa, jeśli kliknę z pulpitu, ale nie działa z terminala.

Jakakolwiek pomoc byłaby bardzo mile widziana?

Odpowiedzi:


2

ŚCIEŻKA $

Tak, musisz ustawić PATHzmienną tak:

$ export PATH=/usr/local/Cellar/sqlite:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Ta linia może być nieco trudna do odczytania, więc tutaj jest podzielona przez dwukropki, a każda ścieżka jest na osobnej linii:

$ awk -v addPath="$1" 'BEGIN{RS=":";ORS=addPath "\n"}{$1=$1}1' <<< $PATH
/usr/local/Cellar/sqlite
/usr/local/bin
/Library/Frameworks/Python.framework/Versions/2.7/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin

$PATHZnajduje się lista katalogów - oddzielonych dwukropkami ( :) - który wyszukuje obudowy przez jeden po drugim poszukujących co kiedykolwiek po prostu wpisane w wierszu. Kolejność ma znaczenie, więc jeśli sqlitepojawia się w wielu lokalizacjach, pierwszym katalogiem, w którym została znaleziona, jest miejsce, z którego zostanie wykorzystana.

gdzie się znajdują?

Możesz użyć tego typepolecenia, aby zobaczyć, skąd pochodzi określona aplikacja.

Przykłady

$ type -a sqlite3 
sqlite3 is /usr/bin/sqlite3

Oto używam go z -aprzełącznikiem, który pokaże wszystkie wystąpienia:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

To się udało! Dziękuję bardzo. Nie wiedziałem, jak dodać wiele ścieżek do instrukcji. Teraz jest jasne, że są one po prostu oddzielone przez „:”
BandfuzzAlex

@ user46531 - ciesz się, że problem został rozwiązany. Dzięki za pytanie.
slm

@ user46531, mimo że wykonalne, jest to nieprawidłowe rozwiązanie. zobacz moją odpowiedź.
strugee

11

Rozwiązanie slm jest w rzeczywistości niepoprawne (chociaż jest użyteczne). Korzystając z Homebrew, nie powinieneś dodawać /usr/local/Cellar/*do $ PATH; zamiast tego powinieneś dodać /usr/local/bindo swojej $ PATH (co już zrobiłeś), a następnie symlinkować rzeczy w piwnicy /usr/local/bin. Ponieważ jest zaprojektowany w ten sposób, Homebrew może oczywiście zrobić to dość łatwo dla Ciebie:

brew link sqlite

automatycznie utworzy potrzebne linki. (Tym razem Homebrew nie zrobił tego dla ciebie automatycznie, ponieważ sqlite jest tylko dla beczek, co oznacza, że ​​musisz to zrobić ręcznie).

Jako notatkę dodatkową / przyjazne przypomnienie, nigdy nie należy dodawać /usr/local/bindo ścieżki systemowej, tylko do ścieżki użytkownika. Dzieje się tak w przypadku, gdy programy oczekują sqlite dostarczonego przez Apple, ale znajdują wersję dostarczoną przez Homebrew, powodując problemy.


1
Być może nie jest to dobry pomysł. brew link sqlite: „Ostrzeżenie: sqlite jest wyłącznie z beczki i musi być połączone z --force”
Marcelo Cantos

Tak - jakie są negatywne konsekwencje (jeśli w ogóle) przymusowego połączenia? Co może się zepsuć? Naprawdę powinny dać jakieś wskazanie tego w komunikacie ostrzegawczym.
iconoclast
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.