Erro ao chamar um script de outro script

3

Estou escrevendo alguns scripts para iniciar vlc e atualizar periodicamente sua lista de reprodução. O update_pls.sh funciona bem se eu o executar a partir do prompt, mas quando eu chamá-lo de start_vlc.sh , em cada ciclo for eu recebo isso:

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

start_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"

Não consigo encontrar a causa disso e gostaria de receber ajuda. Vasco

    
por Vasco Sotomaior 21.08.2014 / 20:04

1 resposta

2

Seu update_pls.sh é um script bash , mas quando você invoca a partir de start_vlc.sh você usa sh , o que provavelmente não executa bash em seu sistema. Tente alterar a linha para bash update_pls.sh ou chmod a+x on update_pls.sh e apenas invocá-la diretamente como um comando.

Algumas notas nos seus scripts:

Na linha echo 'date' , echo é desnecessário, use apenas date .

Não há necessidade de parênteses em linhas como DIA='(date +%d)' , incluindo estas iniciarão outra instância do seu shell e adicionarão muita sobrecarga ao script. DIA=$(date) é provavelmente a forma mais preferível (aqui os colchetes do dólar substituem os backticks), veja Os backticks (ou seja, 'cmd') nas shells * sh foram preteridos? .

Não há necessidade de um : no seu if / else, basta fazer if ! [ -n "$a" ]; then e você pode descartar a parte else.

Há algumas outras coisas, mas acho que isso é o suficiente para mim.

    
por 21.08.2014 / 20:18