이 질문은 다음과 관련이 있습니다.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
.
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를 사용한다고 가정합니다 —용어 적용특별한 상황입니다).