While loops not looping through all values

General Tech Bugs & Fixes 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Bugs & Fixes related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago

 

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 com/tag/input">input values. To do so, I have created a Unix shell script which should run the various com/tag/programs">programs for the number of different com/tag/input">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 " > com/tag/input">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 com/tag/input">inputs (in this example, 1 2 3 4) and finishes without running the com/tag/programs">programs for the various other com/tag/sets">sets of com/tag/input">inputs.

profilepic.png
manpreet 2 years ago

 

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

seq 12">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">12   

Therefore steeldriver's comment is probably correct, and either the mpiexec or one of the pythonprograms 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">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  

0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.