다른 스크립트 내부에서 스크립트를 호출하는 중 오류가 발생했습니다.

다른 스크립트 내부에서 스크립트를 호출하는 중 오류가 발생했습니다.

나는 vlc재생 목록을 시작하고 주기적으로 업데이트하기 위해 몇 가지 스크립트를 작성 중입니다. 프롬프트에서 실행하면 update_pls.sh제대로 작동하지만 프롬프트에서 호출하면 start_vlc.shfor주기마다 다음과 같은 결과가 나타납니다.

./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.shshbashbash update_pls.shchmod a+xupdate_pls.sh

스크립트에 대한 몇 가지 참고 사항:

실제로 쓸모가 echo `date`없다면 echo그냥 사용하세요 date.

다음과 같은 줄에 괄호를 사용할 필요가 없습니다 DIA=`(date +%d)`. 이러한 줄을 포함하면 셸의 다른 인스턴스가 시작되고 스크립트에 많은 오버헤드가 추가됩니다. DIA=$(date)아마도 가장 선호되는 형식일 것입니다(여기서는 달러 괄호가 백틱을 대체함).*sh 쉘에서는 백틱(예: "cmd")이 더 이상 사용되지 않습니까?.

:if/else에서는 a를 사용할 필요가 없습니다 . 이렇게만 하면 if ! [ -n "$a" ]; thenelse 부분을 제거할 수 있습니다.

그 외에도 몇 가지 더 있지만 제 생각에는 이 정도면 충분하다고 생각합니다.

관련 정보