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
Windowsと同じように、sqliteでも通常どおりキーを使用したいと思います。
私の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
(参考:これらはほとんどの端末でこれらのキーによって生成される通常のシーケンスです。それらを解釈するのは端末またはプログラム/ライブラリ次第です。を押すと、動作中の端末でこれを表示できます。 Ctrl+v 次に押す End またはその他の文字以外のキー。ctrl-Vは次のキー押下を文字通りに処理するように設定します。)
sqlite3
バイナリがreadline
を使用していないか、readline構成(inputrc
)が壊れているようです(ただし、bash
が正常に機能している場合は可能性が低くなります)。
Readlineが次のように使用されているかどうかを確認/拒否できる場合があります。PATH
にない場合は、which sqlite3
をフルパスに置き換えてください。
ldd `which sqlite3`
libreadline.so
などが表示された場合は、動作するはずですので、INPUTRC
環境変数、~/.inputrc
および/etc/inputrc
を確認してください。静的にリンクされている(libreadline.a
)slimの可能性があります。
strings -a `which sqlite3`| grep -i inputrc
文字列INPUTRC
、~/.inputrc
、または/etc/inputrc
が存在する場合、readlineが静的にリンクされているように見え、機能するはずです。
(せいぜい、pragma compile_options
からいくつかの基本バージョンとコンパイル情報(サポートされている場合はsqlite3
)しか取得できませんが、機能の完全なセットは取得できません。そのため、バイナリを調べてみる必要があります。)
ldd
もstrings
もreadlineを示さない場合は、バイナリがサポートされていないことはほぼ確実です。
それ以外の場合は、この回答を確認してください: buntuでreadlineをサポートするSQLite
sqlite3
バイナリでreadlineサポートがない場合は、次のいずれかを使用してwrapできます。
rlwrap sqlite3
socat READLINE EXEC:"sqlite3"
どちらの場合も、コマンドラインで履歴ファイルを指定できます。
bash
readlineバインディングをチェックして、readlineが期待どおりに機能し、構成されていることを確認することもできます。
bind -p | egrep '\[[ABCD3].?":'
私のシステム(rxvt
内でbash-3.x
を実行)では、次のようになります。
"\M-[3~": delete-char
"\M-[D": backward-char
"\M-[C": forward-char
"\M-[B": next-history
"\M-[A": previous-history
\M
は「meta」であり、escapeと同等であるため、「\M-
」が表示されている場所では「\e
」も機能するはずです。印刷されると、escapeは^[
(control- [)として表されます。