Clavier étrange lors de l'utilisation de shell sqlite sur linux

9

J'utilise un mastic connecté à une boîte Linux. En l'utilisant avec bash, mon clavier fonctionne bien, mais lorsque j'utilise le shell sqlite (programme sqlite3), mes touches deviennent folles:

del=^[[3~
up=^[[A
left=^[[D
right=^[[C
down=^[[B

voici mon env (la partie pertinente):

TERM=linux
SHELL=/bin/bash
SHLVL=1
INPUTRC=/etc/inputrc

Je voudrais utiliser mes clés normalement sur sqlite, comme je le fais sur windows.

mon inputrc:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

# Completed names which are symbolic links to
# directories have a slash appended.
set mark-symlinked-directories on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif
kurast
la source

Réponses:

9

(Pour info: ce sont les séquences normales générées par ces touches sur la plupart des terminaux, c'est à un terminal ou à un programme / bibliothèque de les interpréter. Vous pouvez le montrer sur un terminal de travail en appuyant sur Ctrl+ vpuis sur Endou sur une autre touche sans caractère, où ctrl-V définit la touche suivante à traiter littéralement.)

Il semble que votre sqlite3binaire n'utilise pas readline, ou que la configuration de la ligne de lecture ( inputrc) soit cassée (moins probable si cela bashfonctionne bien).

Vous pourrez peut-être confirmer / refuser si la ligne de lecture est utilisée avec ce qui suit, remplacez-le which sqlite3par le chemin complet s'il n'est pas dans votre PATH.

ldd `which sqlite3` 

Si vous voyez libreadline.soou similaire, cela devrait fonctionner, alors vérifiez votre INPUTRCvariable d'environnement, ~/.inputrcet /etc/inputrc. Il y a une faible chance qu'il soit lié statiquement ( libreadline.a), pour vérifier essayer:

strings -a `which sqlite3`| grep -i inputrc

Si les chaînes INPUTRC, ~/.inputrcou /etc/inputrcsont présentes, il semble que readline était liée statiquement, et devrait fonctionner.

(Au mieux, vous ne pouvez obtenir que des versions de base et compiler des informations ( pragma compile_options, si elles sont prises en charge) sqlite3, mais pas l'ensemble complet des fonctionnalités, c'est pourquoi nous devons aller fouiller le binaire.)

Si ni lddni stringsindiquer readline, il est presque certain que le binaire n'a pas de support.

Sinon, vérifiez cette réponse: SQLite avec prise en charge de la ligne de lecture sur Ubuntu

Si vous n'avez pas de prise en charge de lecture en ligne dans votre sqlite3binaire, vous pouvez l' encapsuler en utilisant l'un des éléments suivants:

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

Les deux vous permettent de spécifier un fichier d'historique sur la ligne de commande.

Vous pouvez également vérifier vos bashfixations readline, juste pour vous assurer que readline fonctionne et configuré comme prévu:

bind -p | egrep '\[[ABCD3].?":'

Sur mon système (fonctionnant bash-3.xdans un rxvt), j'obtiens:

"\M-[3~": delete-char
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[B": next-history
"\M-[A": previous-history

\Mest "meta", ce qui équivaut à escape , donc là où vous voyez " \M-" a " \e" devrait aussi fonctionner. Lors de l'impression, escape est représenté par ^[(control- [).

Mr Spuratic
la source
J'ai ajouté mon inputrc, si vous pouviez jeter un œil pour exclure cette possibilité
kurast
et mon ldd de sqlite n'affiche pas libreadline
kurast
1
Il n'a probablement pas de support Realdine alors, soit mettez à niveau votre package (vérifiez les problèmes de compatibilité si vous devez mettre à niveau la version), soit utilisez-le rlwrapcomme solution de contournement. Réponse mise à jour.
mr.spuratic
Mon binaire n'est pas lié statiquement, et ma sortie de liaison est comme la vôtre. Cependant, je n'ai ni rlwrap ni socat dans mon installation, et je n'ai pas d'accès root pour les installer.
kurast