Teclado extraño al usar sqlite shell en linux

9

Yo uso una caja de linux conectada a través de masilla. Al usarlo con bash, mi teclado funciona bien, pero cuando uso el shell sqlite (programa sqlite3) mis teclas se vuelven locas:

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

Aquí está mi env (la parte relevante):

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

Me gustaría usar mis teclas normalmente en sqlite, como lo hago en Windows.

mi 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
fuente

Respuestas:

9

(FYI: esas son las secuencias normales generadas por esas teclas en la mayoría de los terminales, depende de un terminal o programa / biblioteca interpretarlas. Puede mostrar esto en un terminal que funciona presionando Ctrl+ vluego presionando Endu otra tecla sin caracteres, donde ctrl-V establece que la siguiente pulsación de tecla se trate literalmente).

Parece que su sqlite3binario no está usando readline, o la configuración de readline ( inputrc) está rota (aunque bashes menos probable que funcione correctamente).

Es posible que pueda confirmar / denegar si readline se está utilizando con lo siguiente, reemplazar which sqlite3con la ruta completa si no está en su PATH.

ldd `which sqlite3` 

Si ve libreadline.soo similar, entonces debería funcionar, así que verifique su INPUTRCvariable de entorno ~/.inputrcy /etc/inputrc. Hay una pequeña posibilidad de que esté estáticamente vinculado ( libreadline.a), para verificar probar:

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

Si las cadenas INPUTRC, ~/.inputrco /etc/inputrcestán presentes, parece que readline estaba estáticamente vinculado y debería funcionar.

(En el mejor de los casos, solo puede obtener una versión básica y compilar información ( pragma compile_optionssi es compatible) sqlite3, pero no el conjunto completo de características, por lo que debemos buscar en el binario).

Si lddni stringsindica ni readline, entonces es casi seguro que el binario no tiene soporte.

De lo contrario, verifique esta respuesta: SQLite con soporte de readline en Ubuntu

Si no tiene soporte para readline en su sqlite3binario, puede envolverlo usando uno de:

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

Ambos le permiten especificar un archivo de historial en la línea de comando.

También puede verificar los bashenlaces de readline, solo para asegurarse de que readline funciona y está configurado como se espera:

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

En mi sistema (ejecutándose bash-3.xdentro de un rxvt) obtengo:

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

\Mes "meta", que es equivalente a escapar , por lo que donde ves " \M-" a " \e" también debería funcionar. Cuando se imprime, escape se representa como ^[(control- [).

Sr. púrpura
fuente
Agregué mi entrada, si pudiera echar un vistazo para excluir esta posibilidad
kurast
y mi ldd de sqlite no muestra libreadline
kurast
1
Es probable que no tiene soporte realdine a continuación, o bien actualizar su paquete (problemas de compatibilidad comprobar si tiene que actualizar la versión), o el uso rlwrapcomo una solución. Respuesta actualizada
Sr.Spuratic
Mi binario no está vinculado estáticamente, y también mi salida de enlace es como la suya. Sin embargo, no tengo rlwrap o socat en mi instalación, y no tengo acceso de root para instalarlos.
kurast