나는 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
스크립트가 있지만 use 에서 호출 bash
하면 시스템에서 실행 되지 않을 수 있습니다 . 행을 or do on 으로 변경 하고 명령으로 직접 호출해 보십시오.start_vlc.sh
sh
bash
bash update_pls.sh
chmod a+x
update_pls.sh
스크립트에 대한 몇 가지 참고 사항:
실제로 쓸모가 echo `date`
없다면 echo
그냥 사용하세요 date
.
다음과 같은 줄에 괄호를 사용할 필요가 없습니다 DIA=`(date +%d)`
. 이러한 줄을 포함하면 셸의 다른 인스턴스가 시작되고 스크립트에 많은 오버헤드가 추가됩니다. DIA=$(date)
아마도 가장 선호되는 형식일 것입니다(여기서는 달러 괄호가 백틱을 대체함).*sh 쉘에서는 백틱(예: "cmd")이 더 이상 사용되지 않습니까?.
:
if/else에서는 a를 사용할 필요가 없습니다 . 이렇게만 하면 if ! [ -n "$a" ]; then
else 부분을 제거할 수 있습니다.
그 외에도 몇 가지 더 있지만 제 생각에는 이 정도면 충분하다고 생각합니다.