如果运行bash
为:
LD_DEBUG=bindings bash
在GNU系统上,bash.*tinfo
在输出中使用grep ,您将看到类似以下内容:
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'
您可以从输出确认nm -D /bin/bash
是bash
使用来自TINFO的符号。
带上任何这些符号的手册页就可以弄清楚它们的用途:
$ man tgetent
NAME
PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
direct curses interface to the terminfo capability database
基本上,bash
更可能是它的readline
(libreadline是静态链接的)编辑器,使用它们来查询terminfo数据库以查找终端功能,以便它可以在任何情况下正确运行其行编辑器(发送正确的转义序列并正确识别按键)终奌站。
至于为什么readline是静态链接到的bash
,您必须记住由同一个人readline
共同开发bash
并包含在bash
。
可以构建bash
与系统的已安装链接libreadline
,但前提是该版本具有兼容版本,并且不是默认版本。您需要configure
在编译时使用调用脚本--with-installed-readline
。
TERM
?啊,没关系-我看到的是源码包ncurses
。