Bash 读取文本输出并跳过当前循环

Bash 读取文本输出并跳过当前循环,bash,process,Bash,Process,我有一个脚本,在一些目录上有一个循环,它在每个目录中执行一个程序 folders=( "1" "2" ) for i in "${folders[@]}" do cd $i output=$(program) while read -r line; do match "$line" done <<< "$output" some code here cd .. done 现在,如果$line与给定字符串匹配,我希望脚本停止正在运行的程序,然后开始处理${folder

我有一个脚本,在一些目录上有一个循环,它在每个目录中执行一个程序

folders=( "1" "2" )
for i in "${folders[@]}" 
do 
cd $i 
output=$(program)
while read -r line; do
match "$line"
done <<< "$output"

some code here

cd ..
done
现在,如果$line与给定字符串匹配,我希望脚本停止正在运行的程序,然后开始处理${folders[@]}的下一个元素。基本上是脚本内部的Strg+c

编辑:如果字符串出现,我无法访问程序并使其自行停止

谢谢

现在,如果$line匹配,我希望脚本停止正在运行的程序 使用给定字符串

这将停止程序,正如您所希望的那样

然后开始处理${folders[@]}的下一个元素

这是不一样的

您可以尝试像这样切换代码

folders=( "1" "2" )
for i in "${folders[@]}" 
do 
 cd $i 
 output=$(program)
 while read -r line; do
  if [ "$line" = "Put some similar text in here" ]
  then 
   break
  fi
 done <<< "$output"
# some commands ...
done

这样,您将在循环中退出外部程序。

这是一个复杂的想法。修复程序,使其在生成给定字符串时退出。如果while循环关闭,我无法访问该程序,这是否意味着该程序也会停止?不,break将仅关闭该循环。您需要使用退出0来关闭程序。要清楚:对于程序,我指的是这个脚本!在外部程序完成后,将外部程序的所有输出放入$output,它将启动循环。在您的情况下,没有必要终止extern程序。
folders=( "1" "2" )
for i in "${folders[@]}" 
do 
 cd $i 
 output=$(program)
 while read -r line; do
  if [ "$line" = "Put some similar text in here" ]
  then 
   break
  fi
 done <<< "$output"
# some commands ...
done
folders=( "1" "2" )
for i in "${folders[@]}" 
do 
 cd $i 
 while read -r line; do
  if [ "$line" = "Put some similar text in here" ]
  then 
   break
  fi
 done <<< "$(program)"
# some commands ...
done