Perl调试器能否将ReadLine历史记录保存到文件中?

10

我经常使用lib ReadLine和lib Perl Readline。

然而,Perl调试器拒绝保存会话命令行历史记录。

因此,每次调用调试器时,我都会丢失之前的所有历史记录。

有没有人知道如何让Perl调试器保存会话历史记录,并希望能够类似于bash的HISTORYFILE附加历史记录?


只是为了其他需要的人:要让Perl中的readline正常工作(ctrl-p / ctrl-n / ...),必须安装apt-get install libterm-readline-gnu-perl(至少在Debian中)。 - MacMartin
4个回答

9
我这样做的方法是在我的~/.perldb文件中添加以下行: &parse_options("HistFile=$ENV{HOME}/.perldb.hist"); 调试器命令将存储在~/.perldb.hist中,并可跨会话访问。

6
parse_options("TTY=/dev/stdin ReadLine=0");添加到.perldb文件中,然后执行以下操作:
rlwrap -H .perl_history perl -d ...

1
@bitbucket:过去我遇到了很多问题,无法让内置的readline支持正常工作,所以现在我干脆不再费心了 :) - ysth
ReadLine=0 在这里是什么意思?如果为假,则使用虚拟的 ReadLine,以便您可以调试 ReadLine 应用程序。它的文档对我来说没有太多意义... - new_perl
即使正确的模块已安装,也可以防止调试器使用readline;在您调试的程序本身尝试使用readline会产生冲突的情况下非常有用(或者在您使用外部readline的情况下)。 - ysth
如果perl调试器一开始就没有使用readline,我该如何输入命令? - new_perl
不是Perl函数中的readline,而是提供高级功能的readline库,例如可以使用上下箭头在输入提示处滚动浏览以前的输入内容。 - ysth
如果我使用分页器(对于大型变量很有用,例如|o),Term::ReadLine::GNU会崩溃。Term::ReadLine::Perl可以使用分页器,但是GNU和Perl软件包都无法在线程之间保留历史记录,所以我觉得它们没什么用。最终,rlwrap为我解决了这个问题。谢谢。 - elbeardmorez

4
$ export PERLDB_OPTS=HistFile=$HOME/.perldb.history 

1
我做了以下事情:
1)创建了~/.perldb,这之前不存在。
2)从mirod的答案中添加了&parse_options("HistFile=$ENV{HOME}/.perldb.hist");
3)从mephinet的答案中添加了export PERLDB_OPTS=HistFile=$HOME/.perldb.history到~/.bashrc。
4)运行source .bashrc 5)运行perl -d my program.pl,并得到了这个警告/错误。
perldb: Must not source insecure rcfile /home/ics/.perldb.
        You or the superuser must be the owner, and it must not 
        be writable by anyone but its owner.

6) 我用拥有者读写权限的chmod 700 ~/.perldb保护了~/.perldb,错误消失了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接