读取textoutput并跳过当前循环

时间:2017-04-05 13:59:19

标签: 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

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

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

由于

1 个答案:

答案 0 :(得分:1)

  

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

if [ "$line" = "Put some similar text in here" ]
then 
exit 0
fi

这会停止程序,就像你想要的那样。

  

然后开始处理$ {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

if条件检查字符串中的类似文本,break命令将关闭while loop

<强>加成

相同的代码,不使用$output作为临时存储...

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

这样你将exit循环中的extern程序。