Bàn phím lạ khi sử dụng shell sqlite trên linux


9

Tôi sử dụng một hộp linux kết nối máng putty. Sử dụng nó với bash, bàn phím của tôi hoạt động tốt, nhưng khi tôi đang sử dụng shell sqlite (chương trình sqlite3), các phím của tôi trở nên điên rồ:

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

đây là env của tôi (phần có liên quan):

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

Tôi muốn sử dụng các khóa của mình bình thường trên sqlite, như tôi làm trên windows.

đầu vào của tôi:

# 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

Câu trả lời:


9

(FYI: đó là các chuỗi bình thường được tạo bởi các phím đó trên hầu hết các thiết bị đầu cuối, tùy thuộc vào thiết bị đầu cuối hoặc chương trình / thư viện để giải thích chúng. Bạn có thể hiển thị điều này trên thiết bị đầu cuối hoạt động bằng cách nhấn Ctrl+ vsau đó nhấn Endhoặc phím không phải ký tự khác, trong đó ctrl-V đặt phím nhấn tiếp theo được xử lý theo nghĩa đen.)

Có vẻ như sqlite3nhị phân của bạn không sử dụng readlinehoặc cấu hình readline ( inputrc) bị hỏng (ít có khả năng nếu bashnó hoạt động tốt).

Bạn có thể xác nhận / từ chối nếu which sqlite3đường dẫn đang được sử dụng với mục sau, thay thế bằng đường dẫn đầy đủ nếu nó không nằm trong của bạn PATH.

ldd `which sqlite3` 

Nếu bạn thấy libreadline.sohoặc tương tự, thì nó sẽ hoạt động, vì vậy hãy kiểm tra INPUTRCbiến môi trường của bạn , ~/.inputrc/etc/inputrc. Có một cơ hội mong manh nó được liên kết tĩnh ( libreadline.a), để kiểm tra thử:

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

Nếu các chuỗi INPUTRC, ~/.inputrchoặc /etc/inputrccó mặt, có vẻ như đường dẫn đã được liên kết tĩnh và sẽ hoạt động.

(Tốt nhất bạn chỉ có thể nhận được một số phiên bản cơ bản và biên dịch thông tin ( pragma compile_options, nếu được hỗ trợ) sqlite3, nhưng không phải là bộ tính năng đầy đủ, đó là lý do tại sao chúng ta cần chọc vào nhị phân.)

Nếu không phải lddcũng không stringschỉ ra đường đọc, thì gần như chắc chắn rằng nhị phân không có hỗ trợ.

Nếu không, hãy kiểm tra câu trả lời này: SQLite có hỗ trợ đọc trên Ubuntu

Nếu bạn không có hỗ trợ đọc trong sqlite3tệp nhị phân của mình, bạn có thể gói nó bằng một trong những:

rlwrap sqlite3
socat READLINE EXEC:"sqlite3"

Cả hai đều cho phép bạn chỉ định một tệp lịch sử trên dòng lệnh.

Bạn cũng có thể kiểm tra các bashràng buộc về đường đọc của mình, chỉ để đảm bảo rằng đường đọc đang hoạt động và được định cấu hình như mong đợi:

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

Trên hệ thống của tôi (chạy bash-3.xtrong một rxvt) tôi nhận được:

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

\Mlà "meta", tương đương với thoát , do đó, nơi bạn thấy " \M-" a " \e" cũng hoạt động. Khi được in, thoát được biểu diễn dưới dạng ^[(control- [).


Tôi đã thêm inputrc của mình, nếu bạn có thể xem để loại trừ khả năng này
Kurast

và ldd của tôi về sqlite không hiển thị libreadline
Kurast

1
Sau đó, nó có thể không có hỗ trợ realdine, hoặc nâng cấp gói của bạn (kiểm tra các vấn đề tương thích nếu bạn phải nâng cấp phiên bản) hoặc sử dụng rlwrapnhư một cách giải quyết. Trả lời cập nhật.
mr.spuratic

Nhị phân của tôi không được liên kết tĩnh và đầu ra liên kết của tôi cũng giống như của bạn. Tuy nhiên, tôi không có rlwrap hoặc socat trong cài đặt của mình và tôi không có quyền truy cập root để cài đặt chúng.
Kurast
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.