BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

Error en bash: "Se esperaba un operador binario"

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

Entrecomilla "$@" y nos cuentas ...

🗨️ 1
BocaDePez

Nada... Me da el mismo error.

Gracias.

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

¡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

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 ]