如何知道 bash 是否支持 readline 库?

如何知道 bash 是否支持 readline 库?

这个问题与https://askubuntu.com/q/826288/295286在我的网上搜索中,我找不到任何关于 bash 3.2 是否支持 readline 的内容。因此,我想知道是否有一种系统的方法来找出 bash 使用的库。

在链接的问题中,我曾经locate搜索过readline.so,但这种方法对我来说似乎有点不可靠。

答案1

这可能是重复的(我记得它已被回答)。但:

  • 巴什捆绑阅读线,和
  • 将使用 readline 的捆绑版本,除非
  • 它是经过专门配置的,并且
  • 捆绑版本是静态链接的,所以
  • 您不太可能将其视为 bash 的共享库依赖项。

例如:

$ 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)

另一方面,Debian/testing 中的依赖libncurses.so.5是不必要的(bash 使用仅有的termcap 接口由 ) 提供libtinfo.so.5

如果你想查看 bash 使用 readline,请使用nm -D(Linux...) 查看符号表:

$ 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

外部符号(本质上是相同的方法)显示了这些入口点术语帽界面:

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

(有些人对 libncurses 依赖项感到困惑,并假设 bash 使用 ncurses —术语应用程序是特殊情况)。

相关内容