Term :: ReadLine :: Gnuを使用していますが、シグナル処理で問題が発生しました。以下のスクリプトとスクリプトに送信されたTERMシグナルを考えると、ENTERシグナルのハンドラーは、Enterキーが押されるまでトリガーされません。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シグナルハンドラーを使用したいのですが、それらを無効にすることもできます。
具体的には、Enterキーが押されるのを待つのではなく、シグナルを受信した後に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";
}
}