Activer la saisie semi-automatique dans un shell interactif sqlite3

22

J'utilise sqlite3 sur une machine où je peux utiliser la complétion de tabulation (ie .read abc se complétera automatiquement en .read abcdefghij.db. Je voudrais savoir comment l'activer sur ma machine personnelle.

Les deux machines sont ubuntu linux et le shell est bash. Je fais référence à la saisie semi-automatique dans l'invite interactive sqlite.

Publié à l' origine sur dba .

CoatedMoose
la source

Réponses:

12

Compilez le programme avec readline supoort. Readline est une bibliothèque commune qui gère les entrées utilisateur dans des interpréteurs tels que bash et python. Récupérez la source, les dépendances et configurez avec:

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

Consultez le fichier INSTALL pour plus de détails. De plus, il convient de mentionner qu'il existe probablement des binaires de sqlite3 avec le support de readline déjà emballés pour votre distribution. Regardez autour de vous.

Ярослав Рахматуллин
la source
1
il vous manquait probablement le paquet "-dev" avec les en-têtes nécessaires.
Ярослав Рахматуллин
15

Vous pouvez utiliser rlwrap si vous ne souhaitez pas compiler sqlite3. Il suffit d'exécuter sudo apt install rlwrap, puis de configurer un alias pour sqlite3 dans votre .bashrc:

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

L' -coption vous donne des complétions de nom de fichier.

Et vous pouvez créer un fichier ~/.rlwrap/sqlite3_completionspour compléter les mots clés:

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' -ioption rend la complétion des mots clés insensible.

arekolek
la source
2
Cette réponse mérite beaucoup plus de votes positifs. Notez également que j'ai dû supprimer l' -Noption pour que l'achèvement fonctionne avec sqlite3 d'Ubuntu.
xhienne
Il y a aussi /usr/share/rlwrap/completions(comme indiqué dans man rlwrap) un répertoire pour mettre des fichiers de fin à l'échelle du système pour tous les utilisateurs. Une chose à noter les noms de fichiers d'achèvement ne doit pas se terminer par un _completionsuffixe comme c'est le cas avec le ~/.rlwraprépertoire par utilisateur .
1
rlwrap -a -N -c -i -f ~/.rlwrap/sqlite3_completions sqlite3pour les utilisateurs Debian. echo '.help' | sqlite3 | grep -o '^\.[a-z]* ' >> ~/.rlwrap/sqlite3_completionspour compléter automatiquement toutes les commandes de points.
zhazha