Jeśli działasz bash
jako:
LD_DEBUG=bindings bash
w systemie GNU, a grep dla bash.*tinfo
tego 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 bash
uż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, bash
bardziej prawdopodobne readline
jest , ż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 readline
jest rozwijany wraz bash
z tą samą osobą i jest uwzględniony w źródle bash
.
Możliwe jest budowanie w bash
celu połączenia z zainstalowanym systemem libreadline
, ale tylko jeśli ta wersja jest zgodna, a to nie jest domyślne. Musisz wywołać configure
skrypt w czasie kompilacji za pomocą --with-installed-readline
.
TERM
? Ach, nieważne - widzę, że pakiet źródłowy jestncurses
.