Je pense que j'ai déjà remarqué cela mais je n'y ai jamais beaucoup pensé; maintenant je suis curieux.
> 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 fait partie de ncurses. C'est un système fedora, mais c'est la même chose sur ubuntu, et je remarque sur raspbian (une variante debian) qu'il est également lié à libncurses lui-même.
Quelle en est la raison? Je pensais que tout ce que bash pouvait faire pouvait être fait avec libreadline (auquel, curieusement, il ne fait pas de lien). Est-ce simplement un substitut à cela?
TERM
? Ah, tant pis - je vois que le paquet source estncurses
.zsh
également un lien vers libtinfoRéponses:
Si vous vous exécutez en
bash
tant que:sur un système GNU, et grep pour
bash.*tinfo
dans cette sortie, vous verrez quelque chose comme:Vous pouvez confirmer à partir de la sortie de
nm -D /bin/bash
cela enbash
utilisant ces symboles de tinfo.Apporter la page de manuel pour l'un de ces symboles précise à quoi ils servent:
Fondamentalement,
bash
plus vraisemblablement sonreadline
éditeur (libreadline est lié statiquement dans), utilise ceux-ci pour interroger la base de données terminfo pour en savoir plus sur les capacités du terminal afin qu'il puisse exécuter correctement son éditeur de ligne (en envoyant les séquences d'échappement appropriées et en identifiant correctement les pressions de touches) sur n'importe quel Terminal.Quant à savoir pourquoi readline est lié statiquement
bash
, vous devez garder à l'esprit qu'ilreadline
est développé aux côtésbash
de la même personne et est inclus dans la source debash
.Il est possible de construire
bash
pour être lié au système installélibreadline
, mais seulement si celui-ci est d'une version compatible, et ce n'est pas la valeur par défaut. Vous devez appeler leconfigure
script au moment de la compilation avec--with-installed-readline
.la source
bash
est une application termcap viareadline
, commescreen
et certains autres programmes. Sur la plupart des systèmes Linux (à l'exception de Slackware), vous verrez probablement ncurses comme une implémentation sous-jacente de termcap .La page de manuel de
tgetent
(nommée curs_termcap car c'est ainsi que cela a été fait dans SVr4 ...) dit:C'est-à-dire que si le programme appelant ne regarde pas de près les données retournées et utilise l'interface termcap conventionnelle pour lire la description du terminal et écrire des données à l'écran, il fonctionne exactement comme le termcap d'origine.
La plupart des applications termcap ne sont pas aussi proches (xterm est une exception rare - voir FAQ ).
bash
Fonctionne donc avec ncurses.Cependant, la bibliothèque termcap est plus petite que ncurses. Il y a assez longtemps, cela comptait, et depuis 1997, ncurses dispose d'une option de configuration
--with-termlib
qui lui permet de créer les parties spécifiques à termcap et terminfo en tant que bibliothèque distincte des fonctions nécessaires dans la bibliothèque curses de niveau supérieur. Quelques années ont passé, et certaines des distributions basées sur Linux l'ont incorporé dans leurs packages.Comme
bash
n'utilise aucune des fonctions curses (libncurses, etc.), il est raisonnable de ne lier que contrelibtinfo
.readline
est la partie spécifique à termcapbash
(en fait lorsque je l'ai rencontré pour la première foisbash
, ses parties termcap étaient codées en dur , même si la source officielle a utilisé termcap - peut-être pour économiser quelques octets de plus). Quandbash
est construit avec le bundlereadline
, vous ne le verrez pasreadline
comme une bibliothèque séparée car il ne servirait à rien de faire l'readline
installation du bundle comme une bibliothèque partagée (éventuellement conflictuelle). Mais (selon votre système), vous pouvez voirlibtinfo
que ncurses est construit dans un sens ou dans l'autre (divisé ou non) - pas les deux.la source