GNU/Linux >> Tutoriels Linux >  >> Linux

La variable Curl Outfile ne fonctionne pas dans le script Bash ?

Essayer de raccourcir un script bash qui utilise curl pour récupérer plusieurs appels d'API prend quelque chose comme ceci :

curl --user $USER:$PASS https://api.example.com/foo -o 'foo.json'
curl --user $USER:$PASS https://api.example.com/bar -o 'bar.json'
curl --user $USER:$PASS https://api.example.com/baz -o 'baz.json'

Et utilisez-le sous cette forme :

curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'

Le problème est que curl récupère foo, bar et baz mais n'attribue pas la sortie à foo.json, bar.json et baz.json. Il crée littéralement #1.json et dirige la sortie vers stdout. A été essayé avec des guillemets simples, doubles et sans guillemets, tous les mêmes résultats.
Ceci est exécuté dans un script bash, bien que la commande curl se comporte de la même manière lorsqu'elle est entrée directement sur la ligne de commande. Est-ce un problème de syntaxe OS X ?

Réponse acceptée :

Votre problème est que le {...} l'expression est aussi syntaxe shell valide. Par exemple, exécutez :

echo file/{one,two}

Et vous obtenez :

file/one file/two

Ainsi, lorsque vous exécutez :

curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'

Le {foo,bar,baz} est interprété par votre shell , et curl reçoit réellement la ligne de commande :

  curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'

Depuis curl ne voit pas le {...} expression, vous n'obtenez pas
la manipulation magique pour #1 . La solution consiste simplement à placer l'URL
entre guillemets simples :

curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'

Les guillemets simples empêchent toute expansion du shell de la chaîne.


Linux
  1. Bash Echo La ligne de commande exécutée sur la ligne de commande elle-même (pas dans un script) ?

  2. Impossible de comprendre ce script. Baiser ?

  3. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  4. Le script bash imprime la commande introuvable sur des lignes vides

  5. L'incrémentation du compteur dans la boucle Bash ne fonctionne pas

Variable d'exportation bash

35 exemples de scripts bash

Script bash (I)

Comment exécuter un script bash

Variable d'environnement TERM non définie

Commande Conda fonctionnant dans l'invite de commande mais pas dans le script bash