2012-05-31 5 views
3

donc je suis nouveau à curl et j'essaie d'écrire un script bash que je peux exécuter qui télécharge un fichier. Donc, je commence par l'authentification, puis faire un POST pour demander un téléchargement. On me donne un Foo_ID dans lequel j'analyse en utilisant bash et mets un paramètre. J'essaie ensuite d'utiliser GET certaines données Foo via une URL de téléchargement. Le problème que j'ai est que chaque fois que je passe dans le paramètre que j'ai analysé à partir de la réponse POST, je n'ai rien. Voici un exemple de ce que je fais.commande curl impossible de passer bash paramètre

#!/bin/bash 
curl -b cookies -c cookies -X POST @login_info -d "https://foo.bar.com/auth" 
curl -b cookies -c cookies -X POST @Foo_info -d "https://foo.bar.com/foos" > ./tmp/stuff.t 
myFooID=`cat ./tmp/stuff.t |grep -Po '"foo_id:.*?",'|cut -d '"' -f 4` 
curl -b cookies -c cookies "http://foo.bar.com/foo-download?id=${myFooID}" > ./myFoos/Foo1.data 

J'ai echo'd myFooID pour m'assurer qu'il est correct et qu'il l'est. J'ai aussi echo'd "https://foo.bar.com/foo-download?id=${myFooID}" et il montre correctement l'URL dont j'ai besoin. Quelqu'un pourrait m'aider avec cela comme je l'ai dit, je suis nouveau à l'aide de curl et un peu rouillé sur l'utilisation de commandes bash.

+0

la façon dont vous utilisez le paramètre semble correcte, pouvez-vous également répercuter le résultat de la commande curl? – xvatar

+0

Lorsque je renvoie le résultat de la dernière commande curl Il est simplement vide. – Andrew

+0

Assurez-vous de citer la variable lorsque vous l'écoutez. Faites 'echo" $ myFooID "' et voyez si cela semble correct. Ensuite, faites 'echo -n" $ myFooID "| hexdump -C' et voyez si les valeurs hexadécimales montrent des caractères inattendus. Si vous exécutez les commandes à la main, mais substituez l'ID à la place d'une variable, cela fonctionne-t-il? Vous n'avez pas besoin de 'cat',' grep' accepte les noms de fichiers comme arguments. Vous devriez pouvoir utiliser une variable au lieu d'un fichier temporaire. Utilisez '$()' au lieu de backticks. Ces suggestions ne résoudront cependant pas votre problème. –

Répondre

2

J'ai donc résolu le problème. Le problème était après avoir fait mon post pour le Foo je n'ai pas donné assez de temps pour que mon foo soit créé avant d'essayer de le télécharger. J'ai ajouté une commande de sommeil entre les deux dernières commandes de curl et maintenant cela fonctionne parfaitement. Je voudrais remercier Dennis Williamson de m'avoir aidé à nettoyer mon code, ce qui m'a amené à comprendre mon problème. J'ai créé un sanctuaire pour lui sur mon bureau.

+0

Pour ceux qui cherchent à faire de même dans les données de publication '-d': http://stackoverflow.com/questions/4152388/expanding-variable-in-curl – pulkitsinghal

Questions connexes