web-dev-qa-db-fra.com

Comment inclure la variable d'environnement dans la ligne CURL?

Essayer d'obtenir la transmission pour notifier lorsque le téléchargement est terminé.

Cela marche:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "$TR_TORRENT_NAME", \
  "body": "$TR_TORRENT_NAME completed."}'

... sauf qu'il pousse $TR_TORRENT_NAME et non le contenu réel de cette variable.

Dois-je échapper à une citation ou quelque chose?

32
Ze'ev

Dans les guillemets simples, le Shell ne développe rien. Placez-les plutôt entre guillemets:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": "'"$TR_TORRENT_NAME completed"'."}'

Examinons comment cela fonctionne en regardant:

$ TR_TORRENT_NAME=MyTorrent
$ echo '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", "body": "'"$TR_TORRENT_NAME completed"'."}'
{"type": "note", "title": "MyTorrent", "body": "MyTorrent completed."}

Lorsque la variable Shell apparaît, elle se trouve toujours entre guillemets. Par conséquent, il est correctement développé.

Citer comme ça est un peu subtil. Nous avons des chaînes entre guillemets qui contiennent des guillemets doubles en tant que caractères et se trouvent à côté des chaînes entre guillemets. Pour mieux comprendre cela, prenons ce fragment comme exemple:

 "'"$TR_TORRENT_NAME"'"

Prenant chaque personnage à tour de rôle:

  1. " est un caractère littéral à guillemet double qui se trouve à l'intérieur d'une chaîne entre guillemets simples. (Par souci de brièveté, le début de cette chaîne n'est pas indiqué dans ce fragment.)

  2. ' ferme une chaîne entre guillemets.

  3. " ouvre une chaîne entre guillemets.

  4. $TR_TORRENT_NAME est une variable shell développée entre guillemets.

  5. " ferme la chaîne entre guillemets.

  6. ' ouvre une nouvelle chaîne entre guillemets simples.

  7. " place un caractère guillemet double dans la chaîne guillemets simples.

52
John1024

Pour inclure une variable d'environnement dans une courbe bash sans guillemets autour du contenu de la variable, cela a fonctionné pour moi:

--header 'PRIVATE-TOKEN: '"$PRIVATE_TOKEN"''

Ou utilisez le scénario qui a d'abord été décrit sans guillemets autour du champ body:

curl -u <my-api-token>: \
  -X POST https://api.pushbullet.com/v2/pushes \
  --header 'Content-Type: application/json' \
  --data-binary '{"type": "note", "title": "'"$TR_TORRENT_NAME"'", \
  "body": '"$TR_TORRENT_NAME completed"'.}'
1
Brad Natelborg