Seltsame Tastatur bei Verwendung der SQLite-Shell unter Linux

9

Ich benutze eine Linux-Box, die durch Kitt verbunden ist. Wenn ich es mit Bash verwende, funktioniert meine Tastatur gut, aber wenn ich die SQLite-Shell (SQLite3-Programm) verwende, werden meine Tasten verrückt:

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

Hier ist meine Umgebung (der relevante Teil):

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

Ich möchte meine Schlüssel normalerweise auf SQLite verwenden, wie ich es unter Windows tue.

mein 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
quelle

Antworten:

9

(Zu Ihrer Information: Dies sind die normalen Sequenzen, die von diesen Tasten auf den meisten Terminals generiert werden. Es liegt an einem Terminal oder Programm / einer Bibliothek, sie zu interpretieren. Sie können dies auf einem funktionierenden Terminal anzeigen, indem Sie Ctrl+ vdrücken Endund dann eine andere Nicht-Zeichentaste drücken Strg-V legt den nächsten Tastendruck fest, der wörtlich behandelt werden soll.)

Scheint, als würde Ihre sqlite3Binärdatei nicht verwendet readlineoder die readline-Konfiguration ( inputrc) ist fehlerhaft (weniger wahrscheinlich, wenn bashsie in Ordnung ist).

Möglicherweise können Sie bestätigen / ablehnen, ob readline verwendet wird, und durch which sqlite3den vollständigen Pfad ersetzen, wenn er nicht in Ihrem enthalten ist PATH.

ldd `which sqlite3` 

Wenn Sie libreadline.sooder ähnliches sehen, sollte es funktionieren. Überprüfen Sie daher Ihre INPUTRCUmgebungsvariable ~/.inputrcund /etc/inputrc. Es besteht eine geringe Wahrscheinlichkeit, dass es statisch verknüpft ist ( libreadline.a), um Folgendes zu überprüfen:

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

Wenn die Zeichenfolgen vorhanden INPUTRCsind ~/.inputrcoder /etc/inputrcvorhanden sind, scheint readline statisch verknüpft zu sein und sollte funktionieren.

(Bestenfalls können Sie nur einige Basisversionen abrufen und Informationen ( pragma compile_optionsfalls unterstützt) kompilieren sqlite3, jedoch nicht alle Funktionen, weshalb wir uns mit der Binärdatei befassen müssen.)

Wenn weder lddnoch stringsreadline angezeigt wird, ist es fast sicher, dass die Binärdatei keine Unterstützung hat.

Überprüfen Sie andernfalls diese Antwort: SQLite mit Readline-Unterstützung unter Ubuntu

Wenn Sie nicht Readline- Unterstützung in Ihrem haben Sie sqlite3binäre können Sie wickeln es sich um ein mit:

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

In beiden Fällen können Sie eine Verlaufsdatei in der Befehlszeile angeben.

Sie können auch Ihre bashReadline-Bindungen überprüfen , um sicherzustellen, dass Readline funktioniert und wie erwartet konfiguriert ist:

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

Auf meinem System (läuft bash-3.xinnerhalb eines rxvt) bekomme ich:

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

\Mist "meta", was gleichbedeutend mit " Escape " ist. Wenn Sie also " \M-" a " \e" sehen, sollte dies auch funktionieren. Beim Drucken wird Escape als ^[(control- [) dargestellt.

mr.spuratic
quelle
Ich habe meine Eingabe hinzugefügt, wenn Sie einen Blick darauf werfen könnten, um diese Möglichkeit auszuschließen
kurast
und mein ldd von sqlite zeigt nicht libreadline
kurast
1
Es wahrscheinlich nicht über realdine Unterstützung dann, entweder aktualisieren Sie Ihr Paket (Check Kompatibilitätsprobleme , wenn Sie Version zu aktualisieren haben) oder die Verwendung rlwrapals Behelfslösung. Antwort aktualisiert.
mr.spuratic
Meine Binärdatei ist nicht statisch verknüpft, und auch meine Bindungsausgabe entspricht Ihrer. Ich habe jedoch weder rlwrap noch socat in meiner Installation, und ich habe keinen Root-Zugriff, um diese zu installieren.
Kurast