4 votes

Utiliser les paramètres dans un bash script en utilisant curl

Je crée un script qui fait une requête curl vers un site prédéfini. Malheureusement le script trouve les 3 paramètres mais le curl ne fonctionne pas correctement.

Où est le problème ? Voici ma tentative.

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 deuxième ligne avec echo imprime les valeurs correctes et la même demande POST ne pose aucun problème si l'on utilise directement les paramètres, mais la fonction curl échoue et me donne les erreurs suivantes :

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

4voto

DavidPostill Points 140654

Où est le problème ?

Vous devez utiliser des guillemets.

Shellcheck va analyser votre script et chercher des erreurs :

$ 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.

$

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X