在sqlite3 shell下,按上下方向键可以浏览历史命令,按左右方向键则可以将光标移动到命令中任意字符位置,从而可以修改错误的语句或误敲的字符。所以方向键是sqlite3 shell下最常用的功能。
在debian(包含ubuntu)下,sqlite3 shell方向键默认是不工作的。
这个问题是有意为之的,原因是:命令行编辑特性是有外部依赖的,sqlite3二进制包的维护者不对可用的外部库作假定,默认不去引用这些外部库,否则,二进制包可能是不可用的。
命令行编辑特性依赖的外部库是readline,在debian/ubuntu下,通常readline库默认是已经安装的(比如我的ubuntu 11.10桌面版默认已经安装了这三个包readline-common, libreadline5, libreadline6),但sqlite3在编译阶段需要检测readline的头文件,所以还得安装dev包:
sudo apt-get install libreadline6-dev libreadline-dev
坑爹的是,我用的网易源中没有readline的dev包,google之,在这里找到11.10对应的.deb格式的包:
dpkg -i libreadline-dev_6.2-2ubuntu1_i386.deb
dpkg -i libreadline6-dev_6.2-2ubuntu1_i386.deb
下载与11.10所用版本的sqlite3源码(3.7.7),重新编译、安装,进入sqlite3 shell,发现问题已解决。Enjoy it!