Readline应用程序名称

Pra*_*han 3 bash readline

Readline手册在此处描述了可用的条件构造。特别是手册说

应用程序构造用于包括特定于应用程序的设置。使用Readline库的每个程序都会设置应用程序名称,您可以测试特定的值。这可用于将键序列绑定到对特定程序有用的功能。例如,以下命令添加了一个键序列,该键序列引用Bash中的当前单词或上一个单词:

$if Bash

# Quote the current or previous word "\C-xq": "\eb\"\ef\""

$endif

给定使用readline库的应用程序,如何找出它为“应用程序名称”设置的值?

ric*_*ici 5

理想的解决方案是阅读该应用程序的文档,这无疑会在中的告诉您readline。(是的,这是个玩笑。)

这是一种可行的技术:

带有调试符号的应用程序的成绩单:


$ gdb the_application
...
Reading symbols from /usr/local/bin/the_application...done.
(gdb) b rl_initialize
Breakpoint 1 at 0x496180: file readline.c, line 1050.
(gdb) r
Starting program: /usr/local/bin/the_application 

Breakpoint 1, rl_initialize () at readline.c:1050
1050    {
(gdb) p rl_readline_name
$1 = 0x4d1fbb "TheApplication"
Run Code Online (Sandbox Code Playgroud)

没有调试符号的应用程序更可能的成绩单:


$ gdb the_application
...
Reading symbols from /bin/bash...(no debugging symbols found)...done.
(gdb) break rl_initialize
Breakpoint 1 at 0x48df40
(gdb) r
Starting program: /usr/bin/local/the_application

Breakpoint 1, 0x000000000048df40 in rl_initialize ()
(gdb) p (char*)rl_readline_name
$1 = 0x4b0bcb "TheApplication"
Run Code Online (Sandbox Code Playgroud)