While 循环不循环遍历所有值

While 循环不循环遍历所有值

我用 python 和 C 创建了几段代码,这些代码必须运行多次,每次运行都使用一组新的输入值。为此,我创建了一个 Unix shell 脚本,它应该针对不同输入的数量运行各种程序:

#!/bin/sh
_file="${1:-/dev/null}"

while IFS=' ' read -r f1 f2 f3 f4  
do
    cd folder1
    cd folder2
    echo "$f1 $f2 $f3 $f4 " > inputs.txt
    mpiexec -n 4 a_C_code
    cd ..
    cd ..
    python3 python_code_1.py
    python python_code_2.py
    python python_code_3.py
    python python_code_4.py
    echo "$f1" #So I know how many times the loops has been performed

done < "$_file"

正在读入脚本的文件具有以下形式:

1 2 3 4
5 6 7 8
...

但是,当我执行该程序时,它仅循环遍历第一组输入(在本例中为 1 2 3 4)并完成,而不运行其他各种输入组的程序。

答案1

shell 代码看起来不错,简化的文本版本可以按预期工作:

seq 12 | paste - - - - | 
while IFS=' ' read -r f1 f2 f3 f4 ; do 
    echo "$f1 $f2 $f3 $f4 " 
done

输出:

1   2   3   4    
5   6   7   8    
9   10  11  12   

所以钢铁起子的评论可能是正确的,并且该程序mpiexec或其中一个python程序正在消耗剩余的输入行,因此echo 永远不会到达第二行输入。

作为一个例子,考虑上面的代码,添加了一组饥饿的命令:

seq 12 | paste - - - - | 
while IFS=' ' read -r f1 f2 f3 f4 ; do 
     echo "$f1 $f2 $f3 $f4 "
     (read x; read x; read x;) 
done

输出(注意缺少的行):

1   2   3   4   

相关内容