Nếu bạn chạy bash
như:
LD_DEBUG=bindings bash
trên hệ thống GNU và grep cho bash.*tinfo
đầu ra đó, bạn sẽ thấy một cái gì đó như:
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `UP'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `PC'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `BC'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetent'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetstr'
797: binding file bash [0] to /lib/x86_64-linux-gnu/libtinfo.so.5 [0]: normal symbol `tgetflag'
Bạn có thể xác nhận từ đầu ra của nm -D /bin/bash
mà bash
đang sử dụng những biểu tượng từ tinfo.
Mang trang người đàn ông cho bất kỳ biểu tượng nào trong số đó làm rõ những gì họ làm:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
Về cơ bản, bash
nhiều khả năng readline
trình soạn thảo (libreadline được liên kết tĩnh), sử dụng các trình soạn thảo để truy vấn cơ sở dữ liệu terminfo để tìm hiểu về các khả năng của thiết bị đầu cuối để nó có thể chạy trình soạn thảo dòng chính xác (gửi các chuỗi thoát đúng và xác định chính xác các lần nhấn phím) thiết bị đầu cuối.
Về lý do tại sao readline được liên kết tĩnh bash
, bạn phải nhớ rằng nó readline
được phát triển cùng với bash
cùng một người và được bao gồm trong nguồn của bash
.
Có thể xây dựng bash
để được liên kết với hệ thống đã cài đặt libreadline
, nhưng chỉ khi đó là phiên bản tương thích và đó không phải là mặc định. Bạn cần gọi configure
kịch bản tại thời điểm biên dịch với --with-installed-readline
.
TERM
? Ah, đừng bận tâm - tôi thấy gói nguồn làncurses
.