运行另一个脚本后循环中断时Bash脚本
当循环运行但循环中断时,在bash脚本中运行另一个脚本! 注意,我提到的脚本只是在当前目录中的文件上循环,然后运行mpirun。 下面是我的bash脚本:运行另一个脚本后循环中断时Bash脚本,bash,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="$l
#!/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
问题是run.sh脚本没有向mpirun传递任何参数。该脚本将变量${np}${bin}${ref}${filename}${word\u size}传递给mpirun,但这些变量是主脚本的本地变量,在run.sh中未定义。您可以在主脚本中导出这些变量,以便所有子进程都可以使用它们,但更好的解决方案是在run.sh中使用位置参数:
环路什么时候断?此循环退出的唯一方式是,如果没有更多数据可从$query命名的文件中读取,则情况并非如此。仍有许多行需要读取,但在第一次run.sh运行循环中断后,是否从标准输入读取run.sh?它从循环中继承其标准输入,因此在读取行有机会再次执行之前,它将消耗其余的数据。不,它没有,run.sh只是在当前目录中的文件上循环,然后运行另一个程序,并将每个文件传递给刚才由run调用的程序。sh@chepner是的,mpirun也不是这样的,我说忘记run.sh脚本,如果我调用mpirun而不是run.sh,mpirun将正常工作一次,主while循环在运行mpirun后中断,但是如果我调用ls命令而不是mpirun或run.sh,则while循环工作,ls将运行多次。然后我怀疑您以错误的顺序将参数传递给mpirun。当然,在传递${bin}参数之前,应该先传递命令行选项及其值。如果直接从命令行而不是通过此脚本调用mpirun,会发生什么情况?
for filename in *.fasta; do
mpirun -np "${1}" "${2}" -d "${3}" -ql "${4}" -k "${5}" -b > log
rm $filename
done