我使用通过 putty 连接的 Linux 机器。将它与 bash 一起使用时,我的键盘表现良好,但是当我使用 sqlite shell(sqlite3 程序)时,我的按键变得异常:
del=^[[3~
up=^[[A
left=^[[D
right=^[[C
down=^[[B
这是我的环境(相关部分):
TERM=linux
SHELL=/bin/bash
SHLVL=1
INPUTRC=/etc/inputrc
我希望在 sqlite 上正常使用我的密钥,就像在 windows 上一样。
我的输入:
# 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
答案1
(仅供参考:这些是大多数终端上这些键生成的正常序列,由终端或程序/库来解释它们。您可以在工作终端上按Ctrl+v然后按End或其他非字符键来显示它,其中 ctrl-V 设置下一个按键以按字面处理。)
似乎您的sqlite3
二进制文件没有使用readline
,或者 readline 配置 ( inputrc
) 已损坏(bash
但如果工作正常,则可能性较小)。
您可以使用以下命令确认/否认 readline 是否正在使用,which sqlite3
如果它不在您的PATH
.
ldd `which sqlite3`
如果你看到libreadline.so
或类似的东西,那么它应该可以,所以请检查你的INPUTRC
环境变量,~/.inputrc
然后/etc/inputrc
。有一个苗条的它是静态链接的机会(libreadline.a
),请尝试检查:
strings -a `which sqlite3`| grep -i inputrc
如果存在字符串INPUTRC
,~/.inputrc
或,/etc/inputrc
则看起来 readline 是静态链接的,并且应该可以工作。
(最多只能pragma compile_options
从 获得一些基本版本和编译信息(,如果支持的话)sqlite3
,但不能获得全套功能,这就是为什么我们需要去研究二进制文件。)
如果没有,ldd
也没有strings
指示 readline,那么几乎可以肯定二进制文件不支持。
否则检查这个答案:Ubuntu 上支持 readline 的 SQLite
如果你的二进制文件不支持 readline,sqlite3
你可以裹它使用以下之一:
rlwrap sqlite3
socat READLINE EXEC:"sqlite3"
两者都允许您在命令行上指定历史文件。
您还可以检查bash
readline 绑定,以确保 readline 正常工作并按预期配置:
bind -p | egrep '\[[ABCD3].?":'
在我的系统上(bash-3.x
在内运行rxvt
)我得到:
"\M-[3~": delete-char
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[B": next-history
"\M-[A": previous-history
\M
是“meta”,相当于逃脱,因此您看到“ ”的地方也应该有\M-
“ ”。打印时,\e
逃脱表示为^[
(control-[)。