kur*_*ast 12 linux putty readline
我使用 linux box 连接槽腻子。将它与 bash 一起使用,我的键盘性能良好,但是当我使用 sqlite shell(sqlite3 程序)时,我的键变得疯狂:
del=^[[3~
up=^[[A
left=^[[D
right=^[[C
down=^[[B
Run Code Online (Sandbox Code Playgroud)
这是我的环境(相关部分):
TERM=linux
SHELL=/bin/bash
SHLVL=1
INPUTRC=/etc/inputrc
Run Code Online (Sandbox Code Playgroud)
我想在 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
Run Code Online (Sandbox Code Playgroud)
mr.*_*tic 12
(仅供参考:这些是大多数终端上这些键生成的正常序列,由终端或程序/库来解释它们。您可以通过按Ctrl+v然后按End或其他非字符键在工作终端上显示它,其中ctrl-V 设置下一个要按字面处理的按键。)
似乎您的sqlite3二进制文件没有使用readline,或者 readline 配置 ( inputrc) 已损坏(如果bash工作正常,则不太可能)。
如果 readline 正在与以下which sqlite3一起使用,您可以确认/拒绝,如果它不在您的PATH.
ldd `which sqlite3`
Run Code Online (Sandbox Code Playgroud)
如果您看到libreadline.so或类似,那么它应该可以工作,因此请检查您的INPUTRC环境变量~/.inputrc和/etc/inputrc. 有一个渺茫的机会,它是静态链接(libreadline.a),以检查尝试:
strings -a `which sqlite3`| grep -i inputrc
Run Code Online (Sandbox Code Playgroud)
如果 strings INPUTRC, ~/.inputrcor /etc/inputrcare present 看起来 readline 是静态链接的,应该可以工作。
(充其量只能从 中获得一些基本版本和编译信息(pragma compile_options如果支持)sqlite3,但不能获得完整的功能集,这就是我们需要查看二进制文件的原因。)
如果既没有ldd也没有strings指示 readline,那么几乎可以肯定二进制文件不支持。
否则检查这个答案:SQLite with readline support on Ubuntu
如果您的sqlite3二进制文件中没有 readline 支持,您可以使用以下方法之一对其进行包装:
rlwrap sqlite3
socat READLINE EXEC:"sqlite3"
Run Code Online (Sandbox Code Playgroud)
两者都允许您在命令行上指定历史文件。
您还可以检查您的bashreadline 绑定,以确保 readline 正常工作并按预期配置:
bind -p | egrep '\[[ABCD3].?":'
Run Code Online (Sandbox Code Playgroud)
在我的系统上(在bash-3.x内运行rxvt)我得到:
"\M-[3~": delete-char
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[B": next-history
"\M-[A": previous-history
Run Code Online (Sandbox Code Playgroud)
\M是“meta”,相当于escape,所以你看到“ \M-”a“ \e”的地方也应该工作。打印时,escape表示为^[(control-[)。
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |