Como saber se o bash tem suporte à biblioteca readline?

2

Esta questão está relacionada com link Na minha pesquisa online, não encontrei menção se o bash 3.2 vem com readline Apoio, suporte. Assim, eu gostaria de saber se existe uma maneira sistemática de descobrir o que as bibliotecas bash usam.

Na pergunta vinculada, usei locate para pesquisar readline.so , mas essa abordagem parece um pouco incerta para mim.

    
por Sergiy Kolodyazhnyy 18.09.2016 / 02:13

1 resposta

3

Esta é provavelmente uma duplicata (lembro-me de ser respondida). Mas:

  • bash pacotes readline e
  • usará a versão integrada da linha de leitura, a menos que
  • é especialmente configurado e
  • a versão do pacote está vinculada estaticamente, então
  • é improvável que você veja isso como uma dependência de biblioteca compartilhada do bash.

Por exemplo:

$ ldd /bin/bash
        linux-vdso.so.1 (0x00007ffeae9a5000)
        libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007fe9bc832000)
        libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fe9bc608000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe9bc403000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe9bc062000)
        /lib64/ld-linux-x86-64.so.2 (0x000055a30b725000)

Por outro lado, a dependência no Debian / testing em libncurses.so.5 é desnecessária (bash usa somente a interface termcap que é fornecida por libtinfo.so.5 ).

Se você quiser ver que o bash usa readline, use nm -D (Linux ...) para ver a tabela de símbolos:

$ nm -D /bin/bash |grep readline
00000000006ffab0 B bash_readline_initialized
00000000006fce00 B current_readline_line
00000000006fcdf8 B current_readline_line_index
00000000006fce08 B current_readline_prompt
000000000046d600 T initialize_readline
0000000000475400 T pcomp_set_readline_variables
000000000046d360 T posix_readline_initialize
000000000049a450 T readline
0000000000499d30 T readline_internal_char
0000000000499300 T readline_internal_setup
0000000000499430 T readline_internal_teardown
00000000006f7910 D rl_gnu_readline_p
00000000006fca20 D rl_readline_name
00000000007003f8 B rl_readline_state
00000000006f7914 D rl_readline_version

Os símbolos externos (essencialmente a mesma abordagem) mostram esses pontos de entrada para a interface termcap :

             U tgetent 
             U tgetflag
             U tgetnum 
             U tgetstr
             U tgoto  
             U tputs

(algumas pessoas ficam confusas com a dependência de libncurses e supõem que o bash usa ncurses - aplicativos termcap são um caso especial).

    
por 18.09.2016 / 02:24