首页 > 解决方案 > 执行某些命令时,bash脚本不会循环文件中的行

问题描述

我的脚本从作为参数提供的文本文件中读取“.bag”文件列表。并与每个人一起做某事。(为清楚起见,我省略了大部分“东西”)

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

如果我注释掉该rosbag play -r 10 $bag行,该脚本的行为与我预期的一样:它从 $1 读取每一行并运行循环的迭代,并将该行设置为 $bag。

但是使用 'rosbag play -r 10 $bag' 行,它在第一行正常工作,但随后退出循环并完成。为什么?的返回状态rosbag play0。我怎样才能让这个脚本运行 rosbag play 命令,然后继续循环输入文件的行?

标签: bashloopsrosbag

解决方案


问题与以下相同:

我正在逐行读取文件并运行 ssh 或 ffmpeg,只有第一行得到处理!

所以解决方案是重定向标准输入:

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

推荐阅读