bash脚本在while循环中停止执行 - 为什么?

时间:2012-09-22 12:13:10

标签: bash loops while-loop

我有这个bash脚本,用于将.mp4视频转换为.mp3音频。 虽然在/ home / myname / mp4dir中有更多的mp4文件,但它只运行一次,但循环只执行一次。除非已存在.mp3文件,否则该脚本会将找到的第一个.mp4文件转换为.mp3。这应该在循环中完成,但在第一次调用ffmpeg后脚本停止。 为什么呢?

#!/bin/bash
find /home/myname/mp4dir -name "*.mp4" | while read f
do
        fOut=`echo $f | sed s/mp4/mp3/`
        echo "convert $f => $fOut"
        if ! test -f $fOut
        then
                ffmpeg -i $f -vn -f mp3 $fOut
        fi
done

3 个答案:

答案 0 :(得分:4)

试试这个 在终端

创建bash nohup.sh并粘贴到此

#!/bin/sh
while true
do
 /var/www/bash/Someother-bash-script-goes-here.sh
 sleep 60
done
在nohup.sh所在的终端类型中

nohup sh nohup.sh >/dev/null 2>&1 &
nohup,将每60秒执行一次,你可以像这样进行grep服务检查

 #!/bin/sh
SERVICE='ffmpeg'

if ps ax | grep -v grep | grep $SERVICE > /dev/null
then
    echo "$SERVICE service running, will not bother ffmpeg yet"
else
    echo "$SERVICE is not running"
    echo "$SERVICE is not running!" | /var/www/bash/start_service.sh
fi

答案 1 :(得分:3)

从评论中我们得到的实际上是你正在循环的输入文件(不管是什么样的),ffmpeg至少开始一次。然后,你被困住了。

添加

&> ffmpeg.outerr < /dev/null 

ffmpeg命令并监视文件ffmpeg.outerr,同时执行“循环”,即ffmpeg。它会告诉你问题是什么。您可以自己解决此问题,也可以使用标记ffmpeg使用此 ffmpeg特定问题返回stackoverflow。

答案 2 :(得分:1)

答案是添加&#39; -nostdin&#39; ffmpeg(不会回答像这样的旧问题,但仍然会在相关的谷歌搜索中占据优势)。