# Ayuda script de bash

## edgar_uriel84

Hola, acabo de hacer un pequeño script de bash para grabar radio por internet (usando mplayer) que pienso agregarlo a cron para que funcione automáticamente. El problema que tengo es que el parámetro -endpos no funciona, cuando lo pruebo en consola directamente sirve bien, pero dentro del script no, lo que se de bash scripting es limitado, supongo que debo manejar un PID y terminarlo manualmente... leeré guías de bash pero si alguien sugiere o sabe una solución dejo el script:

```

#!/bin/bash

help() {

    echo "Script que sintoniza un streaming"

    echo "radio [OPCIONES]"

    echo "Opciones:"

    echo "-m <MODE>  Opciones: silent  - Graba todo el tiempo"

    echo "                     capture (default) - Comienza la grabación al teclear C"

    echo "                               y termina presionando C nuevamente. OJO:"

    echo "                               ¡PRESIONAR NUEVAMENTE REESCRIBIRÁ EL ARCHIVO!"

    echo "-t <TIME>  Tiempo de duración de la ejecución. Dado en segundos"

    echo "           Valores clave: 1[m]=6[s] 1[h]=3600[s]"

    echo "           Convertir HH:MM:SS a seg en Bash:"

    echo '           echo $(($(date -ud "HH:MM:SS" +%s)%86400))'

    echo "-f <FILE>  Archivo donde se guardará la grabación. El formato será:"

    echo "           <FILE>-YYYYMMDD-HHMMSS"

    echo "-s <URL>   Estación a sintonizar, default: http://74.86.83.83:8130 (Opus IMER 94.5)"

    exit 0

}

set_mode() {

    if [[ $MODE = "silent" ]]

    then

   OPTIONS="-dumpstream"

    elif [[ $MODE = "capture" || -z $MODE ]]

    then

   OPTIONS="-capture"

    else

   help

    fi

}

# TODO: Aceptar valores HH:MM:SS

set_time() {

    if [[ -z $TIME ]]

    then

   OPTIONS="$OPTIONS"

    elif [[ $TIME -gt 0 ]]

    then

       OPTIONS="$OPTIONS -endpos $TIME"

    else

   help

    fi

}

# Begin Script

PLAYER=mplayer2

STATION=http://74.86.83.83:8130

FILE=Opus

if [[ $1 == "-h" ]]; then

    help

else

    while getopts m:t:s:f: option

    do

   case "${option}"

            in

            m) MODE=${OPTARG} ;;

            t) TIME=${OPTARG} ;;

            s) STATION=${OPTARG} ;;

       f) FILE=${OPTARG} ;;

   esac

    done

    set_mode

    set_time

    FILE_NAME=$HOME/Desktop/$FILE-`date +%Y%m%d-%H%M%S`

    DEFAULT_OPTS="-dumpfile ${FILE_NAME} $STATION"

    # echo $PLAYER $OPTIONS $DEFAULT_OPTS #Ver que comando se ejecuta

    exec $PLAYER $OPTIONS $DEFAULT_OPTS

    exit 0

fi

# End Script

```

Para aquellos que si saben escribir scripts, una disculpa por el uso indiscriminado de sentencias if, prometo cambiarlas un día a switch o algo más bonito.

Gracias de antemano

----------

## opotonil

Creo que no es problema del script, sino de mplayer:

 *Quote:*   

> 
> 
> Complaints/Known Bugs
> 
> some complaints/known bugs about mplayer and mencoder
> ...

 

http://wiki.multimedia.cx/index.php?title=MPlayer_FAQ#Complaints.2FKnown_Bugs

Aqui lo solucionan matando el proceso tras un "sleep":

http://lists.mplayerhq.hu/pipermail/mplayer-users/2012-November/085628.html

Salu2.

----------

## Arctic

 *edgar_uriel84 wrote:*   

> Hola, acabo de hacer un pequeño script de bash para grabar radio por internet (usando mplayer) que pienso agregarlo a cron para que funcione automáticamente. El problema que tengo es que el parámetro -endpos no funciona, cuando lo pruebo en consola directamente sirve bien, pero dentro del script no, lo que se de bash scripting es limitado, supongo que debo manejar un PID y terminarlo manualmente... leeré guías de bash pero si alguien sugiere o sabe una solución dejo el script:
> 
> ```
> 
> #!/bin/bash
> ...

 

Siempre hay quien hace las cosas mejor y no por eso hay que estar disculpándose, gracias por compartilo.

Salu2

----------

