Usar parámetros en un script bash usando curl


3

Estoy creando un script que hace una solicitud de curl a un sitio predefinido. Lamentablemente, el script encuentra los 3 parámetros, pero el rizo no funciona correctamente.

¿Dónde está el problema? Aquí está mi intento.

random="$(cat something.txt)"
echo "ID: ${random} - File: $1 - Var: $2 - Cookie: $3"
url="$(curl -i -L -X POST --cookie 'info=$3' \
  -F 'var=$2' \
  -F 'submit=Send' \
  -F 'file[]=@$1' \
   https://example.com/upload?id=${random})"

La segunda línea con echoimprimir los valores correctos y la misma solicitud POST no da ningún problema al usar directamente los parámetros pero curlfalla y me da los siguientes errores:

Warning: setting file /my/path/to.file  
Warning: failed!

Respuestas:


2

¿Dónde está el problema?

Necesitas usar comillas dobles.

Shellcheck analizará su script y buscará errores:

$ shellcheck myscript

Line 1:
random="$(cat something.txt)"
^-- SC2148: Tips depend on target shell and yours is unknown. Add a shebang.

Line 3:
url="$(curl -i -L -X POST --cookie 'info=$3' \
^-- SC2034: url appears unused. Verify use (or export if used externally).
                                   ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

Line 4:
  -F 'var=$2' \
     ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

Line 6:
  -F 'file[]=@$1' \
     ^-- SC2016: Expressions don't expand in single quotes, use double quotes for that.

Line 7:
   https://example.com/upload?id=${random})"
                                 ^-- SC2086: Double quote to prevent globbing and word splitting.

$ 

Gracias por la sugerencia, desafortunadamente no entiendo cómo citar el parámetro de archivo \"file[]=@$1\"no funciona
Timmy

1
@Timmy ¿Por qué escapas del "s?
DavidPostill

Porque la cadena comienza conurl="$...
Timmy

Por cierto, traté de eliminar a los personajes que escapan, ahora funciona de maravilla, ¡gracias! Tengo que estudiar más la resolución de la cita en bash :)
Timmy

@Timmy {encogiéndose de hombros}. No sé cómo arreglar eso.
DavidPostill
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.