已安装sqlite3 v3.8,但默认情况下mac终端仍运行旧版本3.6


9

我有一台运行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

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

任何帮助将不胜感激?

Answers:


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是目录列表,以冒号(:)分隔,shell逐个搜索目录以查找您在提示符下键入的内容。顺序很重要,因此,如果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

可行!非常感谢。我不知道如何在语句中添加多个路径。现在很明显,它们只是由“:”分隔
BandfuzzAlex

@ user46531-很高兴您的问题已解决。谢谢你的问题。
slm

@ user46531可行时,这是不正确的解决方案。看我的答案。
奋斗

11

slm的解决方案实际上是不正确的(虽然可用)。使用Homebrew时,不应添加/usr/local/Cellar/*到$ PATH中;相反,您应该做的是将您添加/usr/local/bin到$ PATH(已经完成)中,然后将Cellar中的内容符号链接到中/usr/local/bin。由于它是通过这种方式设计的,因此Homebrew显然可以为您轻松地做到这一点:

brew link sqlite

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

作为附带说明/友好的提醒,您绝不应添加/usr/local/bin系统路径,只能添加用户路径。如果程序期望使用Apple提供的sqlite,但是找到Homebrew提供的版本,则可能会引起问题。


1
可能不是一个好主意。brew link sqlite:“警告:sqlite仅用于小桶,必须与--force关联”
Marcelo Cantos

是的,强行链接该链接有什么负面影响(如果有)?什么会坏?他们确实应该在警告消息中对此进行一些说明。
iconoclast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.