BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Error en bash: "Se esperaba un operador binario"

BocaDePez
BocaDePez

Me he creado este sencillo script llamado you para descargas personalizadas con el script youtube-dl:

#!/bin/bash
if [ -f $@ ]; then
youtube-dl --console-title --max-quality=22 -t -c -a $@
else
youtube-dl --console-title --max-quality=22 -t -c $@
fi

Bien. Cuando invoco el script con una sola URL no se me indica ningún mensaje de error, pero si lo invoco con 2 ó más URLs de YouTube, la descarga es correcta, pero siempre me aparece este aviso:

usuario@usuario:~$ ./you https://www.youtube.com/watch?v=0TjfJZRk6mQ https://www.youtube.com/watch?v=cZUy5GWZpHY
./you: línea 3: [: https://www.youtube.com/watch?v=0TjfJZRk6mQ se esperaba un operador binario

Simplemente me gustaría saber si se puede eliminar ese mensaje.

BocaDePez
BocaDePez

Entrecomilla "$@" y nos cuentas ...

🗨️ 1
BocaDePez
BocaDePez

Nada... Me da el mismo error.

Gracias.

BocaDePez
BocaDePez

¿Cuál es la línea 3? Porque yo juraría que el error está en el if de la segunda línea, ya que -f espera un solo parámetro, ¿no?

Mejor haz un bucle for.

🗨️ 1
BocaDePez
BocaDePez

¡Claro! No había caído en la cuenta.

Antes de escribir este hilo incluía el bucle for DENTRO de if then, y saltaba el mensaje. Lo hay que poner es if then DENTRO del bucle for.

#!/bin/bash
for FILE in $@
do
if [ -f $FILE ]; then
youtube-dl --console-title --max-quality=22 -t -c -a $FILE
else
youtube-dl --console-title --max-quality=22 -t -c $FILE
fi
done

Ahora ya no arroja ningún mensaje de error.

La línea 3 es la de if then. Y sí, la opción -f espera un sólo parámetro.

Ahora ya puede corregir todos mis script relacionados.

BocaDePez
BocaDePez

De todas maneras el script siempre va a funcionar mal, no puede existir en el disco un fichero cuyo nombre sea youtube.com/watch?v=7s5Q_aln1zQ ya que eso es una URL, y encima con parámetros HTTP.

Por lo que veo youtube-dl graba un fichero según el ID del video. Si es 7s5Q_aln1zQ por ejemplo, generaría 7s5Q_aln1zQ.mp4 (si es alta resolución) o 7s5q_aln1zQ.flv (si es baja resolución). Algo que tener en cuenta si realmente quieres usarlo en bash con el comando [-f ]