리눅스에서 sqlite shell을 사용할 때 이상한 키보드 env (관련 부분)가

나는 여물통 퍼티에 연결된 리눅스 박스를 사용한다. bash와 함께 사용하면 키보드가 잘 작동하지만 sqlite shell (sqlite3 프로그램)을 사용하면 키가 열광합니다.

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

여기 내 env (관련 부분)가 있습니다 :

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

창문에서와 같이 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



답변

(FYI : 대부분의 터미널에서 해당 키에 의해 생성되는 정상적인 시퀀스입니다.이를 해석하는 터미널 또는 프로그램 / 라이브러리에 달려 있습니다. 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있지만 ( 지원되는 경우) 전체 기능을 사용할 수는 없으므로 바이너리에서 파킹해야합니다.)

readline을 나타내 ldd거나 strings나타내지 않으면 바이너리가 지원하지 않는 것이 확실합니다.

그렇지 않으면이 답변을 확인하십시오 : 우분투에서 readline 지원 SQLite

sqlite3바이너리 에서 readline 지원이없는 경우 다음 중 하나를 사용하여 줄 바꿈 할 수 있습니다 .

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

둘 다 명령 행에서 히스토리 파일을 지정할 수 있습니다.

bashreadline이 제대로 작동하고 구성되어 있는지 확인하기 위해 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”이며 escape 와 동일 하므로 ” \M-“a ” \e“가 표시되는 위치도 작동합니다. 인쇄되면 이스케이프^[(control- [) 로 표시됩니다 .


답변