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
列出一些可能的替代方案,
制作
~/.sqlite_history
成另一个文件的符号链接。只需运行
HOME=/tmp sqlite3
即可让程序将历史记录保存在 中/tmp/.sqlite_history
,尽管这假设您不需要命令环境中的真实主目录。编辑二进制文件并将 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
使用
LD_PRELOAD
垫片我在另一个问题中建议在通话"/tmp/adb.log"
期间将一个文件名(在这种情况下)更改为另一个文件名open()
。
答案3
截至2018年10月10日看来有一个新变量添加, $SQLITE_HISTORY
, 是为了解决这个问题。