Bashセッションで使用しているreadlineのバージョンを確認するにはどうすればよいですか?
私はreadlineライブラリ6.3を持っているように見えるので、特に疑問に思っていますが、set enable-bracketed-paste on
私の.inputrc
は機能していますが、その機能はreadline7.0でのみ追加されました。
MacOS 10.11(Finkと共にインストール)でbash4.4.0を使用しています。
静的にリンクされたライブラリのバージョンを決定する 一般的に信頼できる方法はありません があります。ただし、この場合、rl_readline_version
グローバル変数の値を使用できると思います。
readline.h
は、整数として扱われるべきCプリプロセッサ変数RL_READLINE_VERSION
を定義します。これは、インストールされているReadlineのバージョンに応じてアプリケーションコードを条件付きでコンパイルするために使用できます。値は、ライブラリのメジャーバージョン番号とマイナーバージョン番号の16進エンコードで、形式は0xMMmmです。 [〜#〜] mm [〜#〜]は2桁のメジャーバージョン番号です。 mmは2桁のマイナーバージョン番号です。たとえば、Readline 4.2の場合、RL_READLINE_VERSION
の値は0x0402
になります。
https://tiswww.case.edu/php/chet/readline/readline.html#SEC25
Bash-2.05a以降では、次のようにrl_readline_version
として公開されています。
int rl_readline_version = RL_READLINE_VERSION;
これを確認するために私が知っている最も簡単な方法は gdb
のようなデバッガーを使用 です。例えば:
$ gdb bash
(gdb) print /x (int) rl_readline_version
$1 = 0x700
これは、私のバージョンのbash
がreadlineバージョン7.0を実行していることを意味します。
興味がある場合は、readlineメンテナーがMac OSXでの静的リンクの理由をここで説明しています。
- Mac OSXに含まれているreadlineおよび履歴ライブラリの静的バージョンに対してシェルリンクを確実にするための特別な処理があります。 Appleは、標準ライブラリとして不十分な動的libreadlineおよびlibhistory「置換」を出荷します。
https://tiswww.case.edu/php/chet/bash/NOTES
readline
はMacOS Xで静的にリンクされているため、ldd
とotool
は役に立ちません。ただし、完全を期すために、Linuxでどのように表示されるかを示します。 Ubuntu18.04での私の外観は次のとおりです。
$ ldd /bin/bash
linux-vdso.so.1 (0x00007ffeb83c3000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fbcd7d57000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbcd7b53000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbcd7762000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbcd829b000)
ご覧のとおり、この場合、ldd
出力も役に立ちません。代わりにstrace
を使用しました。
$ strace -o strace.log -f bash
# Have to do stuff with interactive mode; `bash -c exit` won't do it.
$ exit
対応するdtrace
コマンドは次のようになると思います。
$ dtrace -o dtrace.log -f bash
まだ試したことがないので、はっきりとは言えません。この時点で、readline
のログファイルをgrepできます。
$ grep readline strace.log
strace.log:30194 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libreadline.so.7", O_RDONLY|O_CLOEXEC) = 3
したがって、Ubuntu 18.04では、予想どおり、readlineバージョン7です。
$ dlocate -F '/lib/x86_64-linux-gnu/libreadline.so.7'
libreadline7:AMD64: /lib/x86_64-linux-gnu/libreadline.so.7.0
libreadline7:AMD64: /lib/x86_64-linux-gnu/libreadline.so.7
$ apt-cache policy libreadline7
libreadline7:
Installed: 7.0-3
Candidate: 7.0-3
Version table:
*** 7.0-3 500
500 http://us.archive.ubuntu.com/ubuntu bionic/main AMD64 Packages
100 /var/lib/dpkg/status