Se você executar bashcomo:
LD_DEBUG=bindings bash
em um sistema GNU, e grep for bash.*tinfonessa saída, você verá algo como:
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'
Você pode confirmar a partir da saída nm -D /bin/bashque bashestá usando esses símbolos do tinfo.
Trazer a página de manual para qualquer um desses símbolos esclarece para que servem:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
Basicamente, o bashmais provável é que o seu readlineeditor (a libreadline esteja estaticamente vinculada), use-os para consultar o banco de dados terminfo para descobrir sobre os recursos do terminal, para que ele possa executar seu editor de linha corretamente (enviando as seqüências de escape corretas e identificando as teclas pressionadas corretamente) em qualquer terminal.
Quanto ao motivo pelo qual o readline está estaticamente vinculado bash, você deve ter em mente que ele readlineé desenvolvido juntamente bashcom a mesma pessoa e está incluído na fonte de bash.
É possível construir bashpara ser vinculado ao sistema instalado libreadline, mas apenas se esse for de uma versão compatível e esse não for o padrão. Você precisa chamar o configurescript no momento da compilação com --with-installed-readline.
TERM? Ah, não importa - eu vejo o pacote fontencurses.