Bash가 readline 라이브러리를 지원하는지 어떻게 알 수 있나요?

Bash가 readline 라이브러리를 지원하는지 어떻게 알 수 있나요?

이 질문은 다음과 관련이 있습니다.https://askubuntu.com/q/826288/295286온라인 검색에서 bash 3.2가 readline을 지원하는지 여부에 대한 정보를 찾을 수 없습니다. 따라서 bash가 어떤 라이브러리를 사용하는지 알아내는 체계적인 방법이 있는지 궁금합니다.

연결된 질문에서 검색했지만 locatereadline.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.

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를 사용한다고 가정합니다 —용어 적용특별한 상황입니다).

관련 정보