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 回答
0

你可以使用awk

echo hello; sleep 2; echo pattern |awk '{print}/pattern/{exit}' 

这将为您提供所有行,直到出现模式,然后退出。

于 2014-05-29T07:46:27.100 回答
-1

如果在找到匹配项后要继续运行该进程,&请在命令后附加一个以在后台运行它:

open(my $fh, '-|', 'echo line 1 && sleep 20 && echo line 2 &');
while (<$fh>) {
    print && last if /1/;
}
close $fh;
于 2014-05-29T13:37:51.600 回答