Скрипт Bash во время прерывания цикла после запуска другого скрипта - PullRequest
0 голосов
/ 19 октября 2019

Запуск другого скрипта в скрипте bash во время выполнения цикла, но цикл прерывается! NB Сценарий, который я упомянул, просто перебирает файлы в текущем каталоге и просто запускает 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

1 Ответ

1 голос
/ 19 октября 2019

Проблема в том, что ваш 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...