Установлен sqlite3 v3.8, но по умолчанию Mac-терминал по-прежнему работает со старой версией 3.6

9

У меня Mac под управлением OS X 10.6.8, который поставляется с предустановленной SQLite3 v3.6. Я установил v3.8 с помощью доморощенного. Но когда я набираю «sqlite3» в моем терминале, он продолжает запускать старую предустановленную версию. Любая помощь?

Не уверен, что переменная PATH как-то связана с этим, но запуск echo $ PATH приводит к следующему: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ бен: / USR / SBIN: / SBIN: / USR / местные / бен: / USR / X11 / бен

И НОВАЯ версия SQLite3 находится в следующем каталоге: / usr / local / Cellar / sqlite

Я должен добавить, что я также загрузил двоичный исполняемый файл на свой рабочий стол, и это работает, если я щелкаю с моего рабочего стола, но не работает с терминала.

Любая помощь будет принята с благодарностью?

BandfuzzAlex
источник

Ответы:

2

$ PATH

Да, вам нужно установить вашу PATHпеременную так:

$ 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

Эта строка может быть немного сложна для чтения, поэтому здесь она разделена двоеточиями, и каждый путь находится на отдельной строке:

$ 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

Это $PATHсписок каталогов, разделенных двоеточиями ( :), которые оболочка просматривает один за другим в поисках того, что вы только что набрали в приглашении. Порядок имеет значение, поэтому, если он sqliteобнаруживается в нескольких местах, первый каталог, в котором он найден, - это место, откуда он будет использоваться.

где находятся вещи?

Вы можете использовать typeкоманду, чтобы увидеть, откуда исходит конкретное приложение.

Примеры

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

Вот я использую его с -aпереключателем, который будет показывать все вхождения:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
SLM
источник
Это сработало! Огромное спасибо. Я не знал, как добавить несколько путей в утверждение. Теперь ясно, что они просто разделены
символом
@ user46531 - рад, что ваша проблема была решена. Спасибо за вопрос.
СЛМ
@ user46531, пока работоспособно, это неправильное решение. смотри мой ответ.
стружка
11

Решение SLM на самом деле неверно (пока можно использовать). При использовании Homebrew вы не должны добавлять /usr/local/Cellar/*в свой $ PATH; вместо этого вы должны добавить /usr/local/binв свой $ PATH (что вы уже сделали), а затем вставить символические ссылки в подвале в /usr/local/bin. Поскольку Homebrew разработан таким образом, он может сделать это довольно легко для вас:

brew link sqlite

автоматически создаст необходимые ссылки. (Homebrew на этот раз не сделал это автоматически для вас, потому что sqlite только для бочонков, а это значит, что вам нужно сделать это вручную).

Как примечание / дружеское напоминание, вы никогда не должны добавлять /usr/local/binк системному пути, только свой пользовательский путь. Это в том случае, если программы ожидают предоставленный Apple sqlite, но находят версию, предоставленную Homebrew, что вызывает проблемы.

strugee
источник
1
Возможно, не очень хорошая идея. brew link sqlite: «Предупреждение: sqlite только для бочонков и должен быть связан с --force»
Марсело Кантос
Да, каковы негативные последствия (если таковые имеются) принудительного связывания? Что может сломаться? Они действительно должны дать некоторые указания на это в предупреждающем сообщении.
иконоборчество