Tastiera sconosciuta quando si utilizza la shell sqlite su Linux


9

Uso un box Linux collegato tramite mastice. Usandolo con bash, la mia tastiera funziona bene, ma quando sto usando la shell sqlite (programma sqlite3) i miei tasti impazziscono:

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

ecco il mio env (la parte rilevante):

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

Vorrei usare le mie chiavi normalmente su sqlite, come faccio su Windows.

il mio 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

Risposte:


9

(FYI: quelle sono le normali sequenze generate da quei tasti sulla maggior parte dei terminali, spetta a un terminale o programma / libreria interpretarli. Puoi mostrarlo su un terminale funzionante premendo Ctrl+, vquindi premendo Endo un altro tasto senza caratteri, dove ctrl-V imposta il prossimo tasto premuto per essere trattato alla lettera.)

Sembra che il tuo sqlite3binario non stia usando readline, o la configurazione readline ( inputrc) sia rotta (meno probabile se bashfunziona bene però).

Potresti essere in grado di confermare / negare se readline viene utilizzato con quanto segue, sostituirlo which sqlite3con il percorso completo se non è nel tuo PATH.

ldd `which sqlite3` 

Se vedi libreadline.soo simili, allora dovrebbe funzionare, quindi controlla la tua INPUTRCvariabile di ambiente ~/.inputrce /etc/inputrc. C'è una piccola possibilità che sia staticamente collegato ( libreadline.a), per provare prova:

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

Se le stringhe INPUTRC, ~/.inputrco /etc/inputrcsono presenti sembra che readline è stata collegata in modo statico, e dovrebbe funzionare.

(Nella migliore delle ipotesi è possibile ottenere solo alcune versioni di base e compilare le informazioni ( pragma compile_options, se supportate) da sqlite3, ma non il set completo di funzionalità, motivo per cui è necessario cercare il binario.)

Se lddstringsindica né readline, allora è quasi certo che il binario non abbia supporto.

Altrimenti controlla questa risposta: SQLite con supporto readline su Ubuntu

Se non hai il supporto readline nel tuo file sqlite3binario puoi avvolgerlo usando uno di:

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

Entrambi consentono di specificare un file cronologico nella riga di comando.

Puoi anche controllare i tuoi bashcollegamenti readline, solo per assicurarti che readline funzioni e sia configurato come previsto:

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

Sul mio sistema (in esecuzione bash-3.xall'interno di rxvt) ottengo:

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

\Mè "meta", che equivale a fuggire , quindi dove vedi " \M-" a " \e" dovrebbe funzionare anche. Quando viene stampato, escape viene rappresentato come ^[(control- [).


Ho aggiunto il mio inputrc, se potessi dare un'occhiata per escludere questa possibilità
kurast

e il mio ldd di sqlite non mostra libreadline
kurast

1
E probabilmente non ha il supporto realdine poi, o aggiornare il proprio pacchetto (problemi di compatibilità di controllo se si deve aggiornare la versione), o l'uso rlwrapcome una soluzione. Risposta aggiornata
mr.spuratic

Il mio binario non è staticamente collegato e anche il mio output di bind è come il tuo. Tuttavia, non ho rlwrap o socat nella mia installazione e non ho accesso come root per installarli.
Kurast,
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.