Jeśli działasz bashjako:
LD_DEBUG=bindings bash
w systemie GNU, a grep dla bash.*tinfotego wyjścia zobaczysz coś takiego:
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'
Możesz potwierdzić na podstawie tego, nm -D /bin/bashże bashużywasz tych symboli z tinfo.
Doprowadzenie strony podręcznika do dowolnego z tych symboli wyjaśnia, do czego służą:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
Zasadniczo, bashbardziej prawdopodobne readlinejest , że jego edytor (libreadline jest statycznie połączony) korzysta z tych zapytań do bazy danych terminfo w celu uzyskania informacji o możliwościach terminala, aby mógł poprawnie uruchomić swój edytor linii (wysyłając prawidłowe sekwencje specjalne i poprawnie identyfikując naciśnięcia klawiszy) na dowolnym terminal.
Jeśli chodzi o to, dlaczego readline jest statycznie powiązany bash, musisz pamiętać, że readlinejest rozwijany wraz bashz tą samą osobą i jest uwzględniony w źródle bash.
Możliwe jest budowanie w bashcelu połączenia z zainstalowanym systemem libreadline, ale tylko jeśli ta wersja jest zgodna, a to nie jest domyślne. Musisz wywołać configureskrypt w czasie kompilacji za pomocą --with-installed-readline.
TERM? Ach, nieważne - widzę, że pakiet źródłowy jestncurses.