首页 > 解决方案 > 运行另一个脚本后循环中断的 Bash 脚本

问题描述

在循环运行但循环中断时在 bash 脚本中运行另一个脚本!注意我提到的脚本只是循环当前目录中的文件并运行 mpirun。这是我的 bash 脚本:

#!/bin/bash
np="$1"
bin="$2"
ref="$3"
query="$4"
word_size="$5"

i=1;
input="$query"
while read line; do
echo $line
  if [[ "${line:0:1}" == ">" ]] ; then
    header="$line"
    echo "$header" >> seq_"${i}".fasta
  else
    seq="$line"
    echo "$seq" >> seq_"${i}".fasta
    if ! (( i % 5)) ; then
        ./run.sh $np $bin $ref $word_size
        ^^^^^^^^
        #for filename in *.fasta; do
        #    mpirun -np "${np}" "${bin}" -d "${ref}" -ql "${filename}" -k "${word_size}" -b > log
        #    rm $filename
        #done
    fi
    ((i++))
  fi
done < $input

标签: bash

解决方案


问题是您的run.sh脚本没有将参数传递给mpirun. 该脚本将变量传递${np} ${bin} ${ref} ${filename} ${word_size}mpirun,但这些变量对于您的主脚本来说是本地的,并且在run.sh. 您可以在主脚本中导出这些变量,以便它们可用于所有子进程,但更好的解决方案是在以下位置使用位置参数run.sh

for filename in *.fasta; do
  mpirun -np "${1}" "${2}" -d "${3}" -ql "${4}" -k "${5}" -b > log
  rm $filename
done

推荐阅读