Habilite el autocompletado en un shell interactivo sqlite3

22

Estoy usando sqlite3 en una máquina donde puedo usar la finalización de pestañas (es decir .read abc se completará automáticamente en .read abcdefghij.db. Me gustaría saber cómo habilitar esto en mi máquina personal.

Ambas máquinas son ubuntu linux y el shell es bash. Me refiero a la finalización automática en el mensaje interactivo sqlite.

Publicado originalmente en dba .

Recubierto
fuente

Respuestas:

12

Compile el programa con readline supoort. Readline es una biblioteca común que maneja la entrada del usuario en intérpretes como bash y python. Obtenga la fuente, las dependencias y configure con:

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

Consulte el archivo INSTALL para más detalles. Además, vale la pena mencionar que probablemente haya binarios de sqlite3 con soporte de línea de lectura ya empaquetados para su distribución. Mira alrededor.

Ярослав Рахматуллин
fuente
1
probablemente le faltaba el paquete "-dev" con los encabezados necesarios.
Ярослав Рахматуллин
15

Puede usar rlwrap si no desea compilar sqlite3. Simplemente ejecute sudo apt install rlwrap, y luego configure un alias para sqlite3 en su .bashrc:

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

La -copción le da terminaciones de nombre de archivo.

Y puede crear un archivo ~/.rlwrap/sqlite3_completionspara completar las palabras clave:

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

La -iopción hace que la finalización de palabras clave no distinga entre mayúsculas y minúsculas.

arekolek
fuente
2
Esta respuesta merece muchos más votos positivos. También tenga en cuenta que tuve que eliminar la -Nopción para que la finalización funcione con sqlite3 de Ubuntu.
xhienne
También hay un directorio /usr/share/rlwrap/completions(como se documenta en man rlwrap) para colocar archivos de finalización en todo el sistema para todos los usuarios. Una cosa a tener en cuenta los nombres de archivo de finalización allí no debería terminar con _completionsufijo como es el caso con el ~/.rlwrapdirectorio por usuario .
1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3para usuarios de Debian echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionspara completar automáticamente todos los comandos de puntos.
zhazha