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