23

I am using sqlite3 on a machine where I can use tab completion (ie .read abc followed by TAB this will autocomplete to .read abcdefghij.db. I would like to know how to enable this on my personal machine.

Both machines are Ubuntu Linux and the shell is bash. I am referring to autocompletion in the sqlite interactive prompt.

Originally posted on dba.

2 Answers 2

13

Compile the program with readline supoort. Readline is a common library that handles user input in interpreters such as bash and python. Fetch the source, the dependencies and configure with:

user@computer in: ~/src/sqlite-autoconf-3071602
$ ./configure --enable-readline=yes

Consult the INSTALL file for details. Also, it's worth mentioning that there are probably binaries of sqlite3 with readline support already packaged for your distro. Look around.

1
17

You can use rlwrap if you don't want to compile sqlite3. Just run sudo apt install rlwrap, and then set up an alias for sqlite3 in your .bashrc:

alias sqlite="rlwrap -a -N -c -i sqlite3"

The -c option gives you filename completions.

And you can create a file ~/.rlwrap/sqlite3_completions to have keyword completions:

ABORT ACTION ADD AFTER ALL ALTER ANALYZE AND AS ASC ATTACH AUTOINCREMENT BEFORE BEGIN BETWEEN BY CASCADE CASE CAST CHECK COLLATE COLUMN COMMIT CONFLICT CONSTRAINT CREATE CROSS CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP DATABASE DEFAULT DEFERRABLE DEFERRED DELETE DESC DETACH DISTINCT DROP EACH ELSE END ESCAPE EXCEPT EXCLUSIVE EXISTS EXPLAIN FAIL FOR FOREIGN FROM FULL GLOB GROUP HAVING IF IGNORE IMMEDIATE IN INDEX INDEXED INITIALLY INNER INSERT INSTEAD INTERSECT INTO IS ISNULL JOIN KEY LEFT LIKE LIMIT MATCH NATURAL NO NOT NOTNULL NULL OF OFFSET ON OR ORDER OUTER PLAN PRAGMA PRIMARY QUERY RAISE RECURSIVE REFERENCES REGEXP REINDEX RELEASE RENAME REPLACE RESTRICT RIGHT ROLLBACK ROW SAVEPOINT SELECT SET TABLE TEMP TEMPORARY THEN TO TRANSACTION TRIGGER UNION UNIQUE UPDATE USING VACUUM VALUES VIEW VIRTUAL WHEN WHERE WITH WITHOUT

The -i option makes keyword completion case insensitive.

3
  • 2
    This answer deserves a lot more up-votes. Also note that I had to remove the -N option for the completion to work with Ubuntu's sqlite3.
    – xhienne
    Commented Jan 20, 2017 at 17:36
  • There's also /usr/share/rlwrap/completions (as documented in man rlwrap) directory to put system-wide completions files for all users. One thing to note the completion file names in there shouldn't end with _completion suffix as is the case with the per-user ~/.rlwrap directory.
    – user373230
    Commented Jun 18, 2017 at 22:27
  • 1
    rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3 for Debian users. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completions to autocomplete all dot commands.
    – zhazha
    Commented Dec 16, 2017 at 2:48

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .