了解和控制sqlite版本加载

问题描述 投票:0回答:1

交互式地,我或多或少知道我得到了什么sqlite3,但在 bash 批处理脚本中,我似乎没有希望!

交互式bash会话

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Applications/Wireshark.app/Contents/MacOS:sbin:/opt/local/bin:/opt/local/sbin

$ alias -p |grep sql
alias sqlite3='/usr/local/Cellar/sqlite/3.44.2/bin/sqlite3'

$ which sqlite3
/usr/bin/sqlite3

$ `which sqlite3` -version
3.8.10.2 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4

$ sqlite3 -version
3.44.2 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f (64-bit)

which 显示内置 /usr/bin/sqlite3

which 旨在仅搜索路径并忽略函数和别名效果?

普通调用根据需要获取较晚的brew安装版本。

在批处理文件中

我在 bash shell 运行中具有相同的 PATH 和别名,但总是获得内置的 3.8 版本,除非我对 /usr/local/Cellar/sqlite/3.44.2/bin/sqlite3 进行一些特定调用

特别是 PATH 和别名似乎没有帮助,如果我在批处理文件的开头定义函数也没有帮助。

$ cat test
#!/bin/bash
export alias sqlite3='/usr/local/Cellar/sqlite/3.44.2/bin/sqlite3'
/usr/local/Cellar/sqlite/3.44.2/bin/sqlite3 -version
printenv
echo =====================
echo
export -p
echo =====================
echo

sqlite3 -version
exit /b 0

产品

3.44.2 2023-11-24 11:41:44 ebead0e7230cd33bcec9f95d2183069565b9e709bf745c9b5db65cc0cbf92c0f (64-bit)
<snip>
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/Applications/Wireshark.app/Contents/MacOS:sbin:/opt/local/bin:/opt/local/sbin

<snip>
declare -x sqlite3="/usr/local/Cellar/sqlite/3.44.2/bin/sqlite3"
=====================

3.8.10.2 2015-05-20 18:17:19 2ef4f3a5b1d1d0c4338f8243d40a2452cc1f7fe4
./test: line 12: exit: /b: numeric argument required

请问在批处理脚本中使用我缺少什么?我不想诉诸链接等,只需告诉这个批处理文件使用新版本,不知何故,无需在任何地方给出特定路径!

(Mat 是正确的,这更多的是 shell 环境和 bash 问题。我开始相信不需要的行为与 sqlite3 的 -batch 开关有关,但事实证明并非如此,并删除了该帖子。这纯粹是被调用的版本.)

bash sqlite batch-file
1个回答
0
投票

就我个人而言,如果您:

,我认为您就犯了双重错误:
  • 对此类事情使用别名,并且
  • 使用homebrew,然后使用特定于版本的东西,例如
    /usr/local/Cellar/sqlite/3.44.2/bin/sqlite3

为什么?当您使用别名时,它们在

crontab
或 Python 中的子进程调用中不起作用,或者在
systemd
脚本中不起作用。

当您使用 honebrew 时,其安装建议您将

/usr/local/bin
添加到您的 PATH,或在 Apple 芯片上添加
/opt/homebrew/bin
homebrew 本身会创建从这些目录到特定版本的符号链接。这意味着您始终在脚本中的任何地方使用
/usr/local/bin
,然后只需执行
brew upgrade
,所有脚本都使用所有工具的最新版本,无需更改,并且 homebrew 可以链接/取消链接您想要的任何版本。

因此,简而言之,我的建议是简单地确保您的 PATH 正确并指定您的首选项顺序,避免使用别名,然后一切都会按您想要的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.