3

システム コマンドを実行して、特定のパターンに一致する出力を待っています。

open(my $fh, '-|', 'echo line 1; sleep 20; echo line 2');
while (<$fh>) {
    print && last if /1/;
}
close $fh;

これは表示されline 1てループを離れますが、外部コマンドが完了するまで終了しません。

必要な出力に一致した直後にスクリプトを終了させるにはどうすればよいですか?

4

3 に答える 3

3

TERMPID にシグナルを送信し、待機せずにファイル ハンドルを閉じることができます。

my $pid = open(my $fh, '-|', 'echo line 1;sleep 5; echo line 2') or die $!;
while (<$fh>) {
    print && last if /1/;
}
kill TERM => $pid;
close $fh;
于 2014-05-29T07:58:50.133 に答える