Se você executar bash
como:
LD_DEBUG=bindings bash
em um sistema GNU, e grep for bash.*tinfo
nessa 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/bash
que bash
está 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 bash
mais provável é que o seu readline
editor (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 bash
com a mesma pessoa e está incluído na fonte de bash
.
É possível construir bash
para 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 configure
script no momento da compilação com --with-installed-readline
.
TERM
? Ah, não importa - eu vejo o pacote fontencurses
.