Variável no curl adiciona barras invertidas à string

1

Estou tentando usar o curl com base em algumas variáveis para criar clientes no Stripe, mas quando atribuo o token a uma variável, estou me dando um erro no Stripe dizendo que ele não existe. No entanto, se eu colocar o texto diretamente, ele funciona. Como posso usar a variável $TOKEN , há algo mudando o valor que eu não percebo?

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=tok_1CjvRiDZ5DqZ0yaUVWXXXXXX
{
  "error": {
    "code": "token_already_used",
    "doc_url": "https://stripe.com/docs/error-codes/token-already-used",
    "message": "You cannot use a Stripe token more than once: tok_1CjvRiDZ5DqZ0yaUVWXXXXXX.",
    "type": "invalid_request_error"
  }
}

Michael$ curl https://api.stripe.com/v1/customers -u $access_token: -d source=$TOKEN
{
  "error": {
    "code": "resource_missing",
    "doc_url": "https://stripe.com/docs/error-codes/resource-missing",
    "message": "No such token: \"tok_1CjvRiDZ5DqZ0yaUVWXXXXXX\"",
    "param": "source",
    "type": "invalid_request_error"
  }
}

$TOKEN é atribuído assim

OUTPUT="$(curl https://api.stripe.com/v1/tokens -u $access_token: -d customer=$external_customer_id)"
TOKEN="$(echo $OUTPUT | jq .id)"
    
por Michael St Clair 03.07.2018 / 23:11

1 resposta

2

jq fornece a saída citada, como seria apropriado para JSON.

$ echo '{ "foo": "foobar" }' | jq .foo
"foobar"

As citações acabam como parte do conteúdo de TOKEN e não são removidas quando a variável é expandida. (Eles são apenas personagens comuns nesse ponto.)

No entanto, existe uma opção apenas para isso:

--raw-output / -r:

With this option, if the filter´s result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes. This can be useful for making jq filters talk to non-JSON-based systems.

Então, use TOKEN="$(echo "$OUTPUT" | jq -r .id)" .

    
por 03.07.2018 / 23:26