安装了sqlite3 v3.8,但是mac终端默认还是运行老版本3.6

Ban*_*lex 9 path sqlite

我有一台运行 OS X 10.6.8 的 Mac,它预装了 SQLite3 v3.6。我使用自制软件安装了 v3.8。但是当我在终端中输入“sqlite3”时,它会继续运行旧的预安装版本。有什么帮助吗?

不确定 PATH 变量是否与它有关,但运行 echo $PATH 会导致以下结果:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

新版本的 SQLite3 位于以下目录中:/usr/local/Cellar/sqlite

我应该补充一点,我还将二进制可执行文件下载到了我的桌面,如果我从桌面单击它就可以工作,但在终端上不起作用。

任何帮助将不胜感激?

str*_*gee 11

slm 的解决方案实际上是不正确的(虽然可用)。使用 Homebrew 时,不应添加/usr/local/Cellar/*到 $PATH 中;相反,你应该做的是你应该添加/usr/local/bin到你的 $PATH (你已经完成了)然后将 Cellar 中的东西符号链接到/usr/local/bin. 由于它是这样设计的,Homebrew 显然可以很容易地为你做到这一点:

brew link sqlite
Run Code Online (Sandbox Code Playgroud)

将自动创建所需的链接。(这次 Homebrew 没有自动为您执行此操作,因为 sqlite 仅用于桶,这意味着您需要手动执行此操作)。

作为旁注/友好提醒,您永远不应该添加/usr/local/bin到系统路径,只添加您的用户路径。这是为了防止程序期望 Apple 提供的 sqlite 但找到 Homebrew 提供的版本,从而导致问题。


slm*_*slm 2

$路径

是的,您需要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
Run Code Online (Sandbox Code Playgroud)

该行可能有点难以阅读,因此在这里它被冒号分隔,每个路径都在自己的行上:

$ 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
Run Code Online (Sandbox Code Playgroud)

$PATH是一个目录列表 - 用冒号 ( :) 分隔 - shell 会逐个搜索该目录,查找您刚刚在提示符下键入的内容。顺序很重要,因此如果sqlite出现在多个位置,则找到的第一个目录就是从中使用它的位置。

东西在哪里?

您可以使用该type命令查看特定应用程序来自何处。

例子

$ type -a sqlite3 
sqlite3 is /usr/bin/sqlite3
Run Code Online (Sandbox Code Playgroud)

这是我将它与-a开关一起使用,它将显示所有出现的情况:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
Run Code Online (Sandbox Code Playgroud)