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
57.9k28 gold badges154 silver badges237 bronze badges
asked Apr 7, 2019 at 1:41
1

1 Answer 1

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 
answered Apr 7, 2019 at 2:09
1
  • Thank you so much for your answer. It turns out that mpiexec is consuming the remainder of the inputs. Commented Apr 7, 2019 at 2:52

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.