次のように実行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'
tinfoからのシンボルを使用しているnm -D /bin/bash
ことの出力から確認できますbash
。
これらのシンボルのmanページを表示すると、その目的が明確になります。
$ 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
です。