簡體   English   中英

監視外部進程:當STDOUT匹配模式時退出

[英]Monitoring external process: Exit when STDOUT matches pattern

我正在運行系統命令並等待輸出匹配特定模式,例如:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM