bashloopsrosbag

bash script won't loop over lines in file when certain command executed


My script reads a list of ".bag" files from a textfile supplied as an argument. and does something with each one. (for clarity, I have omitted most of the "stuff")

while IFS= read -r bag
do

    echo Extracting from $bag

    # Play the script for saving the images
    python2 extract_imgs.py --image_topics "$image_topics" --basepath "extracted_imgs/$bag_name" &
    extract_imgs_PID=$!

    # play the bag file
    rosbag play -r 10 $bag

    echo rosbag play returned: $?
    echo finished playing $bag

    # kill the subscribe node
    kill $extract_imgs_PID

done < $1

If I comment out the rosbag play -r 10 $bag line, this script behaves as I expect: It reads each line from $1 and runs an iteration of the loop with that line set as $bag.

But with the 'rosbag play -r 10 $bag' line, it works correctly for the first line, but then exits the loop and finishes. Why? the return status of rosbag play is 0. How can I get this script to run the rosbag play command and then continue looping over the lines of the input file?


Solution

  • The problem was the same as:

    I'm reading a file line by line and running ssh or ffmpeg, only the first line gets processed!

    so the solution was to redirect stdin:

    rosbag play -r 10 $bag </dev/null