如果程序打印了某些消息,如何在bash中继续while循环?

如果程序打印了某些消息,如何在bash中继续while循环?,bash,while-loop,break,continue,bcftools,Bash,While Loop,Break,Continue,Bcftools,我正在使用一些软件运行bash脚本,这些软件遵循下面的基本模式 while read sample; do software ${sample} > output.txt done <samples.txt 读取样本时;做 软件${sample}>output.txt done我将使用一个命名管道在生成输出时对其进行grep mkfifo p while IFS= read -r sample; do software "$sample" > p &

我正在使用一些软件运行bash脚本,这些软件遵循下面的基本模式

while read sample; do
    software ${sample} > output.txt
done <samples.txt
读取样本时
;做
软件${sample}>output.txt

done我将使用一个命名管道在生成输出时对其进行grep

mkfifo p
while IFS= read -r sample; do
    software "$sample" > p &
    tee < p output.txt | grep -q -m 1 "The site Pf3D7_02_v3:274217" p && kill $!
done < samples.txt
rm p

因为管道的退出状态是最后执行的命令,所以我们只需检查
grep
是否成功返回,然后中断循环。

捕获变量中的软件输出,并根据输出停止流程软件,然后继续循环。你说的“使结果错误”是什么意思?命令
software
返回false?@stephanmg不,很抱歉,我看到这很不清楚-我只是说我得到的结果是错误的,而不是布尔型的错误。好吧,我知道你可以设想一个解决方案。注意,由于@chepner,我之前的一个是不正确的。今天我重新发现了命名管道。感谢@chepner这个伟大的例子。它不应该是
>output.txt
?可能吧,尽管OP使用的是
。我得到的印象是,如果遇到特殊消息,以前运行
软件的任何输出实际上都是无效的,因此我实际上想象类似
if grep-qm1“…”p;然后杀死$!;其他:使用good output.txt做一些事情;fi
@chepner感谢您的建议,但它没有起作用,对于打印消息的任何示例,软件都没有停止,并且都像以前一样运行。万一我没有提供足够的信息,我已经在我的帖子中列出了所有的命令行和你的建议(用于特定的软件)。是否有可能
software
只是在
grep
有机会看到并对消息作出反应之前就完成了?
mkfifo p
while IFS= read -r sample; do
    software "$sample" > p &
    tee < p output.txt | grep -q -m 1 "The site Pf3D7_02_v3:274217" p && kill $!
done < samples.txt
rm p
awk '/The site Pf3D7_02:v3:274217/ { exit 1; }' p && kill $!
while read -u3 sample; do
    software ${sample} | 
    tee output.txt |
    { grep -q -m 1 "The site Pf3D7_02_v3:274217" && cat <&3 }
done 3< samples.txt
while read sample; do
    if 
        software ${sample} | 
        tee output.txt |
        grep -q -m 1 "The site Pf3D7_02_v3:274217"
    then
        break;
    fi
done < samples.txt