更改 .sqlite_history 文件的位置

更改 .sqlite_history 文件的位置

sqlite3将命令历史记录存储在 中.sqlite_history,默认情况下创建于:

$HOME/.sqlite_history

我怎样才能改变这个位置到其他地方?

例如mysql,这是可能的,我可以在其中定义环境变量

MYSQL_HISTFILE=/path/to/whatever/file 

但我找不到任何对应的环境变量sqlite3

export SQLITE_HISTFILE=/tmp/history 

没有影响。我找到了一个邮政有人问同样的问题,但没有给出有用的答案。

答案1

从版本 3.25.3 开始,您可以简单地设置 SQLITE_HISTORY 来更改历史文件名,就像 mattmc3 所写的那样。在之前的版本中,它被硬编码在 shell.c 的第 5576 行(版本 3.14.1):

sqlite3_snprintf(nHistory, zHistory,"%s/.sqlite_history", zHome);

因此,要更改它,本线程中提到的其他选项之一编辑源代码并重新编译。

答案2

列出一些可能的替代方案,

  1. 制作~/.sqlite_history成另一个文件的符号链接。

  2. 只需运行HOME=/tmp sqlite3即可让程序将历史记录保存在 中/tmp/.sqlite_history,尽管这假设您不需要命令环境中的真实主目录。

  3. 编辑二进制文件并将 Hoov 找到的字符串 替换"%s/.sqlite_history"为具有相同字节数的另一个字符串,例如"/tmp/sqlitehistory"

    sed < /usr/bin/sqlite3 's|%s/.sqlite_history|/tmp/sqlitehistory|' >/tmp/sqlite3
    cmp -l /usr/bin/sqlite3 /tmp/sqlite3 # check no extraneous differences
    chmod +x /tmp/sqlite3
    /tmp/sqlite3
    
  4. 使用LD_PRELOAD 垫片我在另一个问题中建议在通话"/tmp/adb.log"期间将一个文件名(在这种情况下)更改为另一个文件名open()

答案3

截至2018年10月10日看来有一个新变量添加, $SQLITE_HISTORY, 是为了解决这个问题。

相关内容