Abilita il completamento automatico in una shell interattiva sqlite3


22

Sto usando sqlite3 su una macchina in cui posso usare il completamento della scheda (cioè .read abc si completerà automaticamente per .read abcdefghij.db. Vorrei sapere come abilitarlo sulla mia macchina personale.

Entrambe le macchine sono Ubuntu Linux e la shell è bash. Mi riferisco al completamento automatico nel prompt interattivo di sqlite.

Originariamente pubblicato su dba .

Risposte:


12

Compilare il programma con supporto readline. Readline è una libreria comune che gestisce l'input dell'utente in interpreti come bash e python. Prendi la fonte, le dipendenze e configura con:

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

Consultare il file INSTALL per i dettagli. Inoltre, vale la pena ricordare che probabilmente ci sono binari di sqlite3 con supporto readline già impacchettato per la tua distribuzione. Guardati intorno.


1
probabilmente ti mancava il pacchetto "-dev" con le intestazioni necessarie.
Ярослав Рахматуллин,

15

Puoi usare rlwrap se non vuoi compilare sqlite3. Basta eseguire sudo apt install rlwrap, e quindi impostare un alias per sqlite3 nella vostra .bashrc:

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

L' -copzione ti dà i completamenti del nome file.

E puoi creare un file ~/.rlwrap/sqlite3_completionsper avere completamenti di parole chiave:

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

L' -iopzione non distingue tra maiuscole e minuscole.


2
Questa risposta merita molti più voti positivi. Inoltre, ho dovuto rimuovere l' -Nopzione affinché il completamento funzionasse con sqlite3 di Ubuntu.
Xhienne,

C'è anche una directory /usr/share/rlwrap/completions(come documentato in man rlwrap) per mettere file di completamenti a livello di sistema per tutti gli utenti. Una cosa da notare nei nomi dei file di completamento non dovrebbe finire con il _completionsuffisso, come nel caso della ~/.rlwrapdirectory per utente .

1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3per utenti Debian. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionsper completare automaticamente tutti i comandi punto.
Zhazha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.