Habilitar o preenchimento automático em um shell interativo sqlite3

22

Estou usando o sqlite3 em uma máquina onde posso usar o preenchimento de guias (por exemplo, .read abc será preenchido automaticamente para .read abcdefghij.db. Gostaria de saber como habilitar isso na minha máquina pessoal.

Ambas as máquinas são ubuntu linux e o shell é bash. Estou me referindo ao preenchimento automático no prompt interativo do sqlite.

Originalmente publicado em dba .

CoatedMoose
fonte

Respostas:

12

Compile o programa com o readline supoort. O Readline é uma biblioteca comum que lida com a entrada do usuário em intérpretes como bash e python. Busque a fonte, as dependências e configure com:

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

Consulte o arquivo INSTALL para obter detalhes. Além disso, vale ressaltar que provavelmente existem binários do sqlite3 com suporte para readline já empacotados para sua distribuição. Olhar em volta.

Ярослав Рахматуллин
fonte
11
você provavelmente estava perdendo o pacote "-dev" com os cabeçalhos necessários.
#
15

Você pode usar o rlwrap se não quiser compilar o sqlite3. Basta executar sudo apt install rlwrape configurar um alias para sqlite3 no seu .bashrc:

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

A -copção fornece conclusões de nome de arquivo.

E você pode criar um arquivo ~/.rlwrap/sqlite3_completionspara ter conclusões de palavras-chave:

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

A -iopção torna a conclusão da palavra-chave sem distinção entre maiúsculas e minúsculas.

arekolek
fonte
2
Esta resposta merece muito mais votos positivos. Observe também que eu tive que remover a -Nopção de conclusão para trabalhar com o sqlite3 do Ubuntu.
xhienne
Também há o diretório /usr/share/rlwrap/completions(conforme documentado man rlwrap) para colocar arquivos de conclusões em todo o sistema para todos os usuários. Uma coisa a observar os nomes dos arquivos de conclusão não deve terminar com _completionsufixo, como é o caso do ~/.rlwrapdiretório por usuário .
11
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3para usuários do Debian. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionspara completar automaticamente todos os comandos de ponto.
Zhazha