Sqlite3 v3.8 installé, mais le terminal mac exécute toujours l'ancienne version 3.6 par défaut

9

J'ai un Mac exécutant OS X 10.6.8, qui est préinstallé avec SQLite3 v3.6. J'ai installé la v3.8 en utilisant homebrew. Mais lorsque je tape "sqlite3" dans mon terminal, il continue d'exécuter l'ancienne version préinstallée. De l'aide?

Je ne sais pas si la variable PATH a quelque chose à voir avec cela, mais l'exécution de echo $ PATH entraîne les résultats suivants: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Et la NOUVELLE version de SQLite3 se trouve dans le répertoire suivant: / usr / local / Cellar / sqlite

Je dois ajouter que j'ai également téléchargé l'exécutable binaire sur mon bureau, et cela fonctionne si je clique sur mon bureau, mais ne fonctionne pas depuis le terminal.

Une aide serait-elle grandement appréciée?

BandfuzzAlex
la source

Réponses:

2

$ PATH

Oui, vous devez définir votre PATHvariable comme suit:

$ 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

Cette ligne peut être un peu difficile à lire, alors ici, elle est divisée par les deux-points, et chaque chemin est sur sa propre ligne:

$ 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

Le $PATHest une liste de répertoires - séparés par deux points ( :) - que le shell recherche un par un à la recherche de ce que vous venez de taper à l'invite. L'ordre est important, donc s'il sqliteapparaît à plusieurs endroits, le premier répertoire où il se trouve est l'endroit d'où il sera utilisé.

où se trouvent les choses?

Vous pouvez utiliser la typecommande pour voir d'où vient une application particulière.

Exemples

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

Voici je l'utilise avec le -acommutateur qui affichera toutes les occurrences:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
slm
la source
Ça a marché! Merci beaucoup. Je ne savais pas comment ajouter plusieurs chemins dans l'instruction. Maintenant, il est clair qu'ils sont juste séparés par ":"
BandfuzzAlex
@ user46531 - content que votre problème ait été résolu. Merci pour la question.
slm
@ user46531 tout en étant réalisable, c'est la mauvaise solution. voir ma réponse.
Strugee
11

La solution de slm est en fait incorrecte (bien qu'utilisable). Lorsque vous utilisez Homebrew, vous ne devez pas ajouter /usr/local/Cellar/*dans votre $ PATH; à la place, ce que vous devez faire est d'ajouter /usr/local/bindans votre $ PATH (ce que vous avez déjà fait), puis de créer un lien symbolique dans la cave vers /usr/local/bin. Comme il est conçu de cette façon, Homebrew peut évidemment le faire assez facilement pour vous:

brew link sqlite

créera automatiquement les liens nécessaires. (Homebrew ne l'a pas fait automatiquement pour vous cette fois car sqlite est uniquement en fût, ce qui signifie que vous devez le faire manuellement).

En guise de note latérale / rappel convivial, vous ne devez jamais ajouter /usr/local/binau chemin système, uniquement votre chemin utilisateur. C'est dans le cas où les programmes s'attendent à la sqlite fournie par Apple mais trouvent la version fournie par Homebrew, causant des problèmes.

strugee
la source
1
Ce n'est peut-être pas une bonne idée. lien de brassage sqlite: "Attention: sqlite est uniquement en fût et doit être lié avec --force"
Marcelo Cantos
Ouais - quelles sont les conséquences négatives (le cas échéant) de le lier de force? Qu'est-ce qui pourrait casser? Ils devraient vraiment en donner une indication dans le message d'avertissement.
iconoclaste du