Se corri bash
come:
LD_DEBUG=bindings bash
su un sistema GNU, e grep per bash.*tinfo
in quell'output, vedrai qualcosa come:
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'
È possibile confermare dall'output nm -D /bin/bash
che bash
sta utilizzando quei simboli da tinfo.
Portare la pagina man per uno di quei simboli chiarisce a cosa servono:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
Fondamentalmente, bash
più probabilmente il suo readline
editor (libreadline è staticamente collegato), usa quelli per interrogare il database terminfo per scoprire le funzionalità del terminale in modo che possa eseguire correttamente il suo editor di linee (inviando le giuste sequenze di escape e identificare correttamente i tasti premuti) su qualsiasi terminale.
Per quanto riguarda perché readline è staticamente collegato bash
, devi tenere presente che readline
è sviluppato insieme bash
alla stessa persona ed è incluso nella fonte di bash
.
È possibile costruire bash
per essere collegato con il sistema installato libreadline
, ma solo se quello è di una versione compatibile e non è l'impostazione predefinita. Devi chiamare lo configure
script al momento della compilazione con --with-installed-readline
.
TERM
? Ah, non importa - vedo che il pacchetto sorgente èncurses
.