Wenn Sie ausführen bashals:
LD_DEBUG=bindings bash
Auf einem GNU-System sehen bash.*tinfoSie in dieser Ausgabe Folgendes:
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'
Sie können anhand der Ausgabe bestätigen, nm -D /bin/bashdass Sie bashdiese Symbole von tinfo verwenden.
Wenn Sie die Manpage für eines dieser Symbole aufrufen, wird klargestellt, wofür sie bestimmt sind:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
Im Grunde genommen bash, eher seinen readlineEditor (libreadline statisch verknüpft ist), verwenden diejenigen , die die term Datenbank abzufragen über Terminal - Fähigkeiten , um herauszufinden , damit es seinen Zeileneditor richtig laufen kann (die richtigen Escape - Sequenzen zu senden und Tastendrücke korrekt identifizieren) auf jedem Terminal.
Wie, warum ist Readline- in statisch gelinkte bash, müssen Sie bedenken , dass readlineneben entwickelt bashvon der gleichen Person und ist in der Quelle enthält bash.
Es ist möglich, basheine Verknüpfung mit dem installierten System herzustellen libreadline, jedoch nur, wenn dieses eine kompatible Version hat, und dies ist nicht die Standardeinstellung. Sie müssen das configureSkript zur Kompilierungszeit mit aufrufen --with-installed-readline.
TERM? Ah, egal - ich sehe das Quellpaket istncurses.