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 / testの依存関係はlibncurses.so.5不要です(bashはただtermcapインターフェースは)で提供されていますlibtinfo.so.5

readlineを使用してbashを表示するには、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を使用していると仮定しています -用語の適用特別な状況です)。

おすすめ記事