Làm thế nào tôi có thể kiểm tra định nghĩa thiết bị đầu cuối có sẵn?


16

Phần lớn câu hỏi là trong tiêu đề, nhưng để giải thích một chút:

Trên hầu hết các Linux tôi có thể find /usr/share/terminfo -type f. Nhưng trên máy Solaris tôi có ở gần - thư mục này thậm chí không tồn tại.

Tôi có thể lặp lại một danh sách các thiết bị đầu cuối và làm một cái gì đó như:

for TERM in xterm xtermc xterm-color xterm-256color screen rxvt
do
    tput cols >/dev/null 2>/dev/null && echo "$TERM available"
done

Nhưng nó chậm. Có tùy chọn nào để khám phá đường dẫn được sử dụng bởi tputcác định nghĩa đầu cuối và tự chạy "tìm" không?

Câu trả lời:


9

Trên Solaris 10 bạn có thể làm:

find /usr/share/lib/terminfo -type f -print

Bạn sẽ có thể làm một cái gì đó như:

find /usr -type d -name terminfo -print

để tìm nơi thư mục được đặt.

Bạn cũng có thể đọc để tìm đường dẫn chính xác:

man terminfo

Điều này thật tuyệt, nhưng tôi có một vấn đề nhỏ với nó - làm thế nào tôi có thể tìm thấy đường dẫn mà không phải đầu ra con người? Nó có cách nào để làm điều đó?

Tôi đã sửa đổi câu trả lời.
Karlson

10

Chương trình infocmp trên "any" hệ thống hỗ trợ terminfo xảy ra để hiển thị tên đường dẫn nơi nó tìm thấy mô tả thiết bị đầu cuối cho thiết bị đầu cuối hiện tại. Ví dụ (AIX trong trường hợp này):

$ infocmp vt100
#       Reconstructed via infocmp from file: /usr/share/lib/terminfo/v/vt100
vt100|vt100-am|Digital VT100,
        am, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        ...

Đối với ncurses, nó phức tạp hơn, bởi vì bạn có thể có nhiều cơ sở dữ liệu terminfo và các mục không cần phải là các tệp riêng lẻ. Một cơ sở dữ liệu và một tệp cho mỗi mục nhập là mặc định , để tương thích với các hệ thống Unix.

Các -Dlựa chọn cho ticinfocmp (bổ sung cuối năm 2011 ) là một cách để hiển thị các thông tin thêm. Ví dụ: trên Debian7 của tôi, tôi có thể thấy điều này:

$ infocmp6 -D
/users/tom/.terminfo
/usr/local/ncurses/share/terminfo
/usr/share/terminfo
/lib/terminfo

Trên máy FreeBSD 10 của tôi, tôi sử dụng cơ sở dữ liệu băm:

$ infocmp -D
/usr/local/ncurses/share/terminfo.db
/usr/local/share/misc/terminfo
/etc/termcap

Ngoài ra, người ta có thể sử dụng toechương trình để tạo một báo cáo về tất cả các mục thiết bị đầu cuối có sẵn. Sử dụng -s-acác tùy chọn cho phép nó kết hợp mọi thứ (như conflictchương trình):

--> /users/tom/.terminfo
----> /usr/local/ncurses/share/terminfo
------> /usr/share/terminfo
--------> /lib/terminfo
--*-+---:       9term           Plan9 terminal emulator for X
--*---*-:       Eterm           Eterm with xterm-style color support (X Window System)
--*-*---:       Eterm-256color  Eterm with xterm 256-colors
--*-*---:       Eterm-88color   Eterm with 88 colors
--*-+---:       MtxOrb          Generic Matrix Orbital LCD display
--*-+---:       MtxOrb162       16x2 Matrix Orbital LCD display
--*-+---:       MtxOrb204       20x4 Matrix Orbital LCD display
--*-+---:       NCR260VT300WPP  NCR 2900_260 vt300 wide mode pc+  kybd
--*-+---:       aaa             ann arbor ambassador/30 lines
--*-+---:       aaa+dec         ann arbor ambassador in dec vt100 mode
--*-+---:       aaa+rv          ann arbor ambassador in reverse video
...

0

Trên Linux, bạn có thể sử dụng straceđể xem hệ thống nào gọi chương trình sử dụng. Sau đây sẽ liệt kê tất cả các cuộc gọi hệ thống "mở (2)" và lọc chúng sedđể hiển thị, hy vọng, tệp terminfo được sử dụng tputđể dịch khả năng terminfo cho thiết bị đầu cuối hiện tại.

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | sed -n -e 's/^.*\(".*terminfo.*"\).*$/\1/p')
echo ${TERMINFO_FILE}

Lưu ý rằng biểu thức sed giả định rằng các tệp terminfo của bạn được lưu trữ trong một đường dẫn có mẫu "terminfo" trong đó. Nếu điều đó làm bạn lo lắng thì bạn có thể sử dụng một giả định khác và chọn cuộc gọi hệ thống "mở" cuối cùng.

TERMINFO_FILE=$(strace -e open tput cud1 2>&1 | grep -e "^open" | tail -n 1 | sed -n -e 's/^.*\(".*"\).*$/\1/p')
echo ${TERMINFO_FILE}

Cuối cùng, bạn chỉ có thể kết xuất danh sách các đường dẫn tìm kiếm terminfo bằng cách sử dụng infocmp -Dhoặc tic -D. Chúng sẽ liệt kê các đường dẫn tìm kiếm terminfo tổng hợp của chúng. Đây là những con đường tương tự được tìm kiếm bởi những lời nguyền.


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.