我正在运行系统命令并等待与特定模式匹配的输出,例如:
open(my $fh, '-|', 'echo line 1; sleep 20; echo line 2');
while (<$fh>) {
print && last if /1/;
}
close $fh;
这将打印line 1
并离开循环,但在外部命令完成之前不会退出。
如何让脚本在匹配所需的输出后立即退出?
您可以向TERM
PID 发送信号,然后无需等待即可关闭文件句柄,
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;
你可以使用awk
:
echo hello; sleep 2; echo pattern |awk '{print}/pattern/{exit}'
这将为您提供所有行,直到出现模式,然后退出。
如果在找到匹配项后要继续运行该进程,&
请在命令后附加一个以在后台运行它:
open(my $fh, '-|', 'echo line 1 && sleep 20 && echo line 2 &');
while (<$fh>) {
print && last if /1/;
}
close $fh;