Acho que já notei isso antes, mas nunca pensei muito; agora estou curioso.
> 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 é parte de ncurses. Este é um sistema fedora, mas é o mesmo no ubuntu, e noto no raspbian (uma variante debian) que também se vincula ao libncurses.
Qual o motivo disso? Eu pensei que tudo o que o bash fazia poderia ser feito com libreadline (que, curiosamente, não está vinculado a). Isso é simplesmente um substituto para isso?
TERM
? Ah, não importa - eu vejo o pacote fontencurses
.zsh
também link para libtinfo tambémRespostas:
Se você executar
bash
como:em um sistema GNU, e grep for
bash.*tinfo
nessa saída, você verá algo como:Você pode confirmar a partir da saída
nm -D /bin/bash
quebash
está usando esses símbolos do tinfo.Trazer a página de manual para qualquer um desses símbolos esclarece para que servem:
Basicamente, o
bash
mais provável é que o seureadline
editor (a libreadline esteja estaticamente vinculada), use-os para consultar o banco de dados terminfo para descobrir sobre os recursos do terminal, para que ele possa executar seu editor de linha corretamente (enviando as seqüências de escape corretas e identificando as teclas pressionadas corretamente) em qualquer terminal.Quanto ao motivo pelo qual o readline está estaticamente vinculado
bash
, você deve ter em mente que elereadline
é desenvolvido juntamentebash
com a mesma pessoa e está incluído na fonte debash
.É possível construir
bash
para ser vinculado ao sistema instaladolibreadline
, mas apenas se esse for de uma versão compatível e esse não for o padrão. Você precisa chamar oconfigure
script no momento da compilação com--with-installed-readline
.fonte
bash
é um aplicativo termcap viareadline
, likescreen
e alguns outros programas. Na maioria dos sistemas baseados em Linux (além do Slackware), é provável que você veja ncurses como implementação subjacente do termcap .A página de manual para
tgetent
(chamada curs_termcap porque foi assim que foi feita no SVr4 ...) diz:Ou seja, se o programa de chamada não observar atentamente os dados retornados e usar a interface termcap convencional para ler a descrição do terminal e gravar dados na tela, ele funcionará exatamente como o termcap original.
A maioria dos aplicativos termcap não parece tão de perto (o xterm é uma exceção rara - consulte as Perguntas frequentes ). Então
bash
funciona com ncurses.No entanto, a biblioteca termcap é menor que ncurses. Há algum tempo, isso importava, e desde 1997 o ncurses possui uma opção de configuração
--with-termlib
que o constrói partes específicas do termocap e terminfo como uma biblioteca separada das funções necessárias na biblioteca de maldições de nível superior. Alguns anos se passaram e algumas das distribuições baseadas em Linux incorporaram isso em seus pacotes.Como
bash
não usa nenhuma das funções de maldição (libncurses, etc.), é razoável vincular apenas o arquivolibtinfo
.readline
é a parte específica do termcapbash
(na verdade, quando eu encontrei pela primeira vezbash
, suas partes do termcap foram codificadas permanentemente , mesmo que a fonte oficial usasse o termcap - talvez para economizar mais alguns bytes). Quandobash
é construído com o pacote configurávelreadline
, você não veráreadline
como uma biblioteca separada porque não faria sentidoreadline
instalar essa instalação configurada como uma biblioteca compartilhada (possivelmente conflitante). Mas (dependendo do seu sistema), você pode verlibtinfo
porque o ncurses é construído de uma maneira ou de outra (dividida ou não) - não as duas.fonte