从另一个脚本内部调用脚本时出错

从另一个脚本内部调用脚本时出错

我正在编写几个脚本来启动vlc并定期更新其播放列表。如果我从提示符处执行它,效果update_pls.sh很好,但是当我从 调用它时start_vlc.sh,在每个for周期中我都会得到以下结果:

./update_pls.sh: 20: ./update_pls.sh: 10#18: not found
./update_pls.sh: 20: ./update_pls.sh: 10#18==DIA: not found

启动_vlc.sh:

   #!/bin/bash
   echo `date`
   echo "A arrancar o VLC..."
   cvlc --loop --fullscreen --extraintfttp --http-password kepler
   sh update_pls.sh

update_pls.sh:

   #!/bin/bash
   /usr/bin/env > /Videos/cron_env.log
   DIR=/Videos
   FILES=$DIR/*
   DIA=`(date +%d)`
   HORA=`(date +%H)`
   echo `date`
   echo "Dir: $DIR"
   echo "A fazer update da playlist.m3u..."
   > $DIR/playlist.m3u
   for f in $FILES
   do
     a=`(basename $f .mov | cut -b 1-2 | sed 's/[^0-9]//g')`
     b=`(basename $f .mov | cut -b 3-4 | sed 's/[^0-9]//g')`
     if [ -n "$a" ]; then    
       :
     else
       a="99"
     fi
     if (( 10#$a<DIA)) || ((10#$a==DIA && 10#$b<=HORA )); then
       echo -e "$f\n" >> $DIR/playlist.m3u
       echo "Adicionado o video $f"
     fi
   done
   echo "A fazer upload da playlist para o VLC..."
   curl -u '':kepler "http://localhost:8080/requests/status.xml?command=pl_empty"
   curl -u '':kepler "http://localhost:8080/requests/status.xml?command=in_enqueue&input$
   curl -u '':kepler "http://localhost:8080/requests/status.xml?command=pl_play"

我无法找到此问题的原因,并希望得到任何帮助。瓦斯科

答案1

update_pls.sh是一个bash脚本,但是当您从start_vlc.sh使用中调用它时sh,它可能不会bash在您的系统上运行。尝试将行更改为bash update_pls.sh或 do chmod a+xonupdate_pls.sh并直接将其作为命令调用。

关于您的脚本的一些注释:

行中echo `date`echo无用,用之即可date

不需要在诸如 之类的行中使用括号DIA=`(date +%d)`,包括这些行将启动 shell 的另一个实例,并给脚本增加大量开销。DIA=$(date)可能是最优选的形式(这里美元括号取代了反引号),请参阅*sh shell 中的反引号(即“cmd”)是否已被弃用?

不需要:在 if/else 中使用 a,只要这样做if ! [ -n "$a" ]; then,就可以删除 else 部分。

还有一些其他的事情,但我认为这对我来说就足够了。

相关内容