Installierte sqlite3 v3.8, aber auf dem Mac-Terminal wird standardmäßig immer noch die alte Version 3.6 ausgeführt

9

Ich habe einen Mac mit OS X 10.6.8, auf dem SQLite3 v3.6 vorinstalliert ist. Ich habe v3.8 mit Homebrew installiert. Wenn ich jedoch "sqlite3" in mein Terminal eingebe, wird weiterhin die alte vorinstallierte Version ausgeführt. Irgendeine Hilfe?

Ich bin nicht sicher, ob die Variable PATH etwas damit zu tun hat, aber das Ausführen von echo $ PATH führt zu folgenden Ergebnissen: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Die NEUE Version von SQLite3 befindet sich im folgenden Verzeichnis: / usr / local / Cellar / sqlite

Ich sollte hinzufügen, dass ich auch die ausführbare Binärdatei auf meinen Desktop heruntergeladen habe. Dies funktioniert, wenn ich von meinem Desktop aus klicke, aber nicht vom Terminal aus.

Jede Hilfe wäre sehr dankbar?

BandfuzzAlex
quelle

Antworten:

2

$ PATH

Ja, Sie müssen Ihre PATHVariable folgendermaßen einstellen :

$ 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

Diese Zeile kann etwas schwierig zu lesen sein, daher wird sie hier durch die Doppelpunkte aufgeteilt, und jeder Pfad befindet sich in einer eigenen Zeile:

$ 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

Dies $PATHist eine Liste von Verzeichnissen - getrennt durch Doppelpunkte ( :) -, die die Shell nacheinander durchsucht, um nach dem zu suchen, was Sie gerade an der Eingabeaufforderung eingegeben haben. Die Reihenfolge ist wichtig. Wenn also sqlitean mehreren Stellen angezeigt wird, wird das erste Verzeichnis, in dem es gefunden wird, verwendet.

Wo befinden sich die Dinge?

Mit dem typeBefehl können Sie sehen, woher eine bestimmte Anwendung kommt.

Beispiele

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

Hier ist, dass ich es mit dem -aSchalter verwende, der alle Vorkommen anzeigt:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
slm
quelle
Das hat funktioniert! Ich danke dir sehr. Ich wusste nicht, wie ich der Anweisung mehrere Pfade hinzufügen sollte. Jetzt ist klar, dass sie nur durch ":" getrennt sind
BandfuzzAlex
@ user46531 - froh, dass Ihr Problem behoben wurde. Danke für die Frage.
slm
@ user46531 Während dies funktioniert, ist dies die falsche Lösung. siehe meine Antwort.
Strugee
11

Die Lösung von slm ist tatsächlich falsch (solange verwendbar). Wenn Sie Homebrew verwenden, sollten Sie nicht /usr/local/Cellar/*$ PATH hinzufügen . Stattdessen sollten Sie /usr/local/binin Ihren $ PATH (was Sie bereits getan haben) einfügen und dann die Dinge im Keller mit verknüpfen /usr/local/bin. Da es so konzipiert ist, kann Homebrew dies natürlich ganz einfach für Sie tun:

brew link sqlite

erstellt automatisch die erforderlichen Links. (Homebrew hat dies diesmal nicht automatisch für Sie erledigt, da SQLite nur im Fass verfügbar ist, was bedeutet, dass Sie es manuell tun müssen).

Als Randnotiz / freundliche Erinnerung sollten Sie dem Systempfad niemals /usr/local/binnur Ihren Benutzerpfad hinzufügen . Dies ist der Fall, wenn Programme das von Apple bereitgestellte SQLite erwarten, aber die von Homebrew bereitgestellte Version finden, was zu Problemen führt.

strugee
quelle
1
Möglicherweise keine gute Idee. Brew Link SQLite: "Warnung: SQLite ist nur Fass und muss mit --force verknüpft werden"
Marcelo Cantos
Ja - was sind die negativen Konsequenzen (wenn überhaupt) einer gewaltsamen Verknüpfung? Was könnte kaputt gehen? Sie sollten wirklich einen Hinweis darauf in der Warnmeldung geben.
Bilderstürmer