Quando eco, recebo isso, que é executado quando o insiro no terminal
curl -i \
-H "Accept: application/json" \
-H "Content-Type:application/json" \
-X POST --data '{"account":{"email":"[email protected]","screenName":"akdgdtk","type":"NIKE","passwordSettings":{"password":"Starwars1","passwordConfirm":"Starwars1"}},"firstName":"Test","lastName":"User","middleName":"ObiWan","locale":"en_US","registrationSiteId":"520","receiveEmail":"false","dateOfBirth":"1984-12-25","mobileNumber":"9175555555","gender":"male","fuelActivationDate":"2010-10-22","postalCode":"10022","country":"US","city":"Beverton","state":"OR","bio":"This is a test user","jpFirstNameKana":"unsure","jpLastNameKana":"ofthis","height":"80","weight":"175","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}' https://xxx:xxxxx@xxxx-www.xxxxx.com/xxxxx/xxxx/xxxx
Mas quando executado no arquivo de script bash, recebo este erro
curl: (6) Could not resolve host: application; nodename nor servname provided, or not known
curl: (6) Could not resolve host: is; nodename nor servname provided, or not known
curl: (6) Could not resolve host: a; nodename nor servname provided, or not known
curl: (6) Could not resolve host: test; nodename nor servname provided, or not known
curl: (3) [globbing] unmatched close brace/bracket at pos 158
este é o código no arquivo
curl -i \
-H '"'Accept: application/json'"' \
-H '"'Content-Type:application/json'"' \
-X POST --data "'"'{"account":{"email":"'$email'","screenName":"'$screenName'","type":"'$theType'","passwordSettings":{"password":"'$password'","passwordConfirm":"'$password'"}},"firstName":"'$firstName'","lastName":"'$lastName'","middleName":"'$middleName'","locale":"'$locale'","registrationSiteId":"'$registrationSiteId'","receiveEmail":"'$receiveEmail'","dateOfBirth":"'$dob'","mobileNumber":"'$mobileNumber'","gender":"'$gender'","fuelActivationDate":"'$fuelActivationDate'","postalCode":"'$postalCode'","country":"'$country'","city":"'$city'","state":"'$state'","bio":"'$bio'","jpFirstNameKana":"'$jpFirstNameKana'","jpLastNameKana":"'$jpLastNameKana'","height":"'$height'","weight":"'$weight'","distanceUnit":"MILES","weightUnit":"POUNDS","heightUnit":"FT/INCHES"}'"'" "https://xxx:[email protected]/xxxxx/xxxx/xxxx"
Suponho que exista um problema com minhas aspas, mas eu brinquei muito com elas e obtive erros semelhantes. Todas as variáveis são definidas com diferentes funções no script real
fonte
EOF
. Depois de removê-lo, está tudo bem.source my_new_file
para definir a função no seu ambiente atual. Depois disso, você pode executar o comando curl como indicado.Solução testada com https://httpbin.org/ e script embutido do bash
1. Para variáveis sem espaços, isto é
1
:basta adicionar
'
antes e depois$variable
ao substituir a sequência desejada2. Para entrada com espaços:
Quebra variável com adicional
"
ou seja"el a"
:Uau funciona :)
fonte
$i
contém espaços. :(i="a b"
em vez de para-ciclo/bin/sh
. No entanto, esta resposta fez o truque. E é muito mais simples que as outras respostas. Muito obrigado! Editei sua resposta com uma formatação mais agradável de quebra de linha. Caso contrário, é difícil identificar o brilho. Cheers mateO Curl pode postar dados binários de um arquivo, então eu tenho usado a substituição de processos e aproveitado os descritores de arquivos sempre que preciso postar algo desagradável com o curl e ainda assim quero acessar os vars no shell atual. Algo como:
Isso acaba parecendo o
--data @/dev/fd/<some number>
que é processado como um arquivo normal. De qualquer forma, se você quiser vê-lo funcionar localmente, basta executarnc -l 8080
primeiro e em um shell diferente disparar o comando acima. Você verá algo como:Como você pode ver, você pode chamar subshells e outros enfeites, além de vars de referência no heredoc. Feliz hacking espero que isso ajude com o
'"'"'""""'''""''
.fonte
Alguns anos atrasado, mas isso pode ajudar alguém se você estiver usando a substituição de avaliação ou backtick:
Usando sed para retirar aspas do início e do fim da resposta
fonte
Aqui está como eu tive que usá-lo no meu script curl para couchDB. Isso realmente ajudou muito. Obrigado!
fonte
Aqui está o que realmente funcionou para mim, após a orientação das respostas aqui:
fonte
As respostas existentes apontam que o curl pode postar dados de um arquivo e empregar heredocs para evitar o escape excessivo de cotações e dividir claramente o JSON em novas linhas. No entanto, não há necessidade de definir uma função ou capturar a saída do gato, porque o curl pode postar dados da entrada padrão. Acho este formulário muito legível:
fonte