Ich glaube, ich habe das schon einmal bemerkt, aber nie viel darüber nachgedacht. jetzt bin ich neugierig.
> ldd /bin/bash
linux-vdso.so.1 => (0x00007fff2f781000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f0fdd9a9000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0fdd7a5000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0fdd3e6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0fddbf6000)
Libtinfo ist Teil von ncurses. Dies ist ein Fedora-System, aber es ist dasselbe auf Ubuntu, und ich stelle fest, dass es auf Raspbian (einer Debian-Variante) auch auf libncurses selbst verweist.
Was ist der Grund dafür? Ich dachte, alles, was Bash gemacht hat, könnte mit libreadline gemacht werden (was seltsamerweise nicht damit verknüpft ist). Ist das einfach ein Ersatz dafür?
TERM
? Ah, egal - ich sehe das Quellpaket istncurses
.zsh
auch Link zu libtinfo auchAntworten:
Wenn Sie ausführen
bash
als:Auf einem GNU-System sehen
bash.*tinfo
Sie in dieser Ausgabe Folgendes:Sie können anhand der Ausgabe bestätigen,
nm -D /bin/bash
dass Siebash
diese Symbole von tinfo verwenden.Wenn Sie die Manpage für eines dieser Symbole aufrufen, wird klargestellt, wofür sie bestimmt sind:
Im Grunde genommen
bash
, eher seinenreadline
Editor (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 , dassreadline
neben entwickeltbash
von der gleichen Person und ist in der Quelle enthältbash
.Es ist möglich,
bash
eine Verknüpfung mit dem installierten System herzustellenlibreadline
, jedoch nur, wenn dieses eine kompatible Version hat, und dies ist nicht die Standardeinstellung. Sie müssen dasconfigure
Skript zur Kompilierungszeit mit aufrufen--with-installed-readline
.quelle
bash
ist eine Termcap- Anwendung überreadline
, wiescreen
und einige andere Programme. Auf den meisten Linux-basierten Systemen (abgesehen von Slackware) wird ncurses wahrscheinlich als zugrunde liegende Implementierung von termcap angesehen .Die Handbuchseite für
tgetent
( curs_termcap genannt, weil es in SVr4 so gemacht wurde ...) sagt:Das heißt, wenn das aufrufende Programm die zurückgegebenen Daten nicht genau betrachtet und die herkömmliche Termcap-Schnittstelle zum Lesen der Terminalbeschreibung und zum Schreiben von Daten auf den Bildschirm verwendet, funktioniert es genau wie die ursprüngliche Termcap.
Die meisten Termcap-Anwendungen sehen nicht so genau aus (xterm ist eine seltene Ausnahme - siehe FAQ ). Funktioniert also
bash
mit Flüchen.Die Termcap-Bibliothek ist jedoch kleiner als ncurses. Vor einiger Zeit war das wichtig, und seit 1997 verfügt ncurses über eine Konfigurationsoption
--with-termlib
, mit der die termcap- und terminfo-spezifischen Teile als Bibliothek erstellt werden können, die von den Funktionen der übergeordneten Curses-Bibliothek getrennt ist. Einige Jahre vergingen, und einige der Linux-basierten Distributionen haben dies in ihre Pakete aufgenommen.Da
bash
keine der Curses-Funktionen (libncurses usw.) verwendet wird, ist es sinnvoll, nur gegen die zu verlinkenlibtinfo
.readline
ist der termcap-spezifische Teil vonbash
(tatsächlichbash
waren seine termcap-Teile bei meiner ersten Begegnung fest codiert , obwohl die offizielle Quelle termcap verwendete - vielleicht, um ein paar weitere Bytes zu sparen). Wennbash
es mit der gebündelten Bibliothek erstelltreadline
wird, wird es nichtreadline
als separate Bibliothek angezeigt, da es keinen Sinn macht, diese gebündeltereadline
Installation als (möglicherweise widersprüchliche) gemeinsam genutzte Bibliothek durchzuführen. Aber (abhängig von Ihrem System) können Sie sehen,libtinfo
dass ncurses auf die eine oder andere Weise erstellt wird (geteilt oder nicht) - nicht beides.quelle