在 Ubuntu 上支持 readline 的 SQLite

age*_*ser 22 console readline packages sqlite ubuntu

sqlite3在 Ubuntu 上安装了该软件包,但不支持 readline。这意味着没有命令历史记录和 readline 为您提供的其他漂亮功能。

这是配置问题还是包装问题?是否有不同的包存档可以为我提供开箱即用的 readline 支持?或者,我如何自己编译 sqlite3 以确保它具有 readline 支持?

小智 40

你总是可以使用 rlwrap:

rlwrap sqlite3 database.db
Run Code Online (Sandbox Code Playgroud)

仅供参考,我刚刚检查了我的 hardy heron 安装,它的 sqlite3 确实有 readline 支持。


the*_*ega 20

我添加另一个答案,因为这是谷歌上“ ubuntu sqlite3 readline ”的第一次命中:

android SDK 安装自己的sqlite3二进制版本。此二进制文件不提供readline支持。如果您将 Android SDK 添加到您的路径中,这可能会让您认为您没有readline支持,事实上,每个 Ubuntu 包都是在编译时提供readline支持的。

另请参阅此Ubuntu 错误报告,其中描述了相同的情况。

  • Anaconda 做同样的事情。啊!/usr/bin/sqlite3 工作正常。 (6认同)
  • 感谢您指出了这一点。我的 Android SDK 隐藏了我的 /usr/bin/sqlite3 应用程序。 (2认同)
  • +1,这也是我的问题,我在“$PATH”之后有“$ANDROID_HOME/Sdk/platform-tools”,但我只是没有安装sqlite3。我发现这个线程使用完全相同的搜索短语。 (2认同)

Rob*_*ruz 6

  1. 从https://www.sqlite.org/download.html下载包含 C 源代码的 zip 文件(sqlite-amalgamation-nnnnnnn.zip)
  2. 解压得到 shell.c、sqlite3.c 和 .h 文件。
  3. 如果尚未安装,请安装 libreadline 和 libncurses。在 Ubuntu Linux 上,通过运行以下命令进行安装:

    sudo apt install libreadline-dev libncurses-dev

  4. 运行以下命令进行构建:

    gcc -DSQLITE_ENABLE_FTS5 -DHAVE_READLINE shell.c sqlite3.c -lpthread -ldl -lm -lreadline -lncurses -o sqlite3

注意:您需要 -DHAVE_READLINE 和 -lreadline 和 -lncurses 才能获得 readline 功能。

将 sqlite3 二进制文件复制到 /usr/bin 或添加到您的路径。