我正在编写几个脚本来启动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+x
onupdate_pls.sh
并直接将其作为命令调用。
关于您的脚本的一些注释:
行中echo `date`
,echo
无用,用之即可date
。
不需要在诸如 之类的行中使用括号DIA=`(date +%d)`
,包括这些行将启动 shell 的另一个实例,并给脚本增加大量开销。DIA=$(date)
可能是最优选的形式(这里美元括号取代了反引号),请参阅*sh shell 中的反引号(即“cmd”)是否已被弃用?。
不需要:
在 if/else 中使用 a,只要这样做if ! [ -n "$a" ]; then
,就可以删除 else 部分。
还有一些其他的事情,但我认为这对我来说就足够了。