1

I have created a few pieces of code - in python and C – that have to be run multiple times, each run with a new set of input values. To do so, I have created a Unix shell script which should run the various programs for the number of different inputs:

#!/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"

The file that is being read into the script has the following form:

1 2 3 4
5 6 7 8
...

However, when I execute the program, it only loops through the first set of inputs (in this example, 1 2 3 4) and finishes without running the programs for the various other sets of inputs.

Rui F Ribeiro
  • 56,709
  • 26
  • 150
  • 232

1 Answers1

1

The shell code looks OK, and a simplified text version works as expected:

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

Output:

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

Therefore steeldriver's comment is probably correct, and either the mpiexec or one of the python programs are consuming the remaining lines of input so that echo never gets to the second line of input.

As an example, consider the above code with one more hungry set of commands added:

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

Output (note the missing lines):

1   2   3   4   
agc
  • 7,223
  • Thank you so much for your answer. It turns out that mpiexec is consuming the remainder of the inputs. – JasKa071 Apr 07 '19 at 02:52