我正在使用 Term::ReadLine::Gnu 并且遇到了信号处理问题。给定下面的脚本和发送到脚本的 TERM 信号,TERM 信号的处理程序直到按下回车键后才会触发。使用 Term::ReadLine:Perl 不会发生这种情况。
我读过 Term::ReadLine::Gnu 有自己的内部信号处理程序,但坦率地说,我不知道如何使用它们。
我已经查看了http://search.cpan.org/~hayashi/Term-ReadLine-Gnu-1.20/Gnu.pm#Term::ReadLine::Gnu_Variables尝试将 rl_catch_signals 变量设置为 0,但这没有帮助. 理想情况下,我想使用 Gnu 信号处理程序,但我也会满足于禁用它们。
具体来说,我需要在收到信号后触发 TERM 处理程序,而不是等待按下回车键。
任何帮助或建议当然不胜感激!
#!/usr/bin/perl
use strict;
use warnings;
use Term::ReadLine;
$SIG{TERM} = sub { print "I got a TERM\n"; exit; };
my $term = Term::ReadLine->new('Term1');
$term->ornaments(0);
my $prompt = 'cmd> ';
while ( defined (my $cmd = $term->readline($prompt)) ) {
$term->addhistory($cmd) if $cmd !~ /\S||\n/;
chomp($cmd);
if ($cmd =~ /^help$/) {
print "Help Menu\n";
}
else {
print "Nothing\n";
}
}