Estou tentando fazer login em uma API usando curl. Como a solicitação espera JSON, estou usando isso:
curl -s -X POST -H "Content-Type: application/json" \
$API_URL/auth -d@- <<EOF
{
"id": "[email protected]",
"password": "!password!"
}
EOF
... e está funcionando bem. Eu recebo um resultado parecido com isto:
{"access_token":"jXed...I5mQ=","expires_in":3600}
Mas quando tento capturar a saída em uma variável, isso não funciona.
Eu tentei:
x=$(curl ...)
... mas isso falha com bash: !password!: event not found
Sim, minha senha começa com !
; esta é uma instalação de teste da API, então estou usando uma senha fraca.
Estou ciente de que, se eu usar set +H
ou executar isso a partir de um script, o bash não fará nada com !
. Meu problema é que:
- Às vezes, eu quero copiar e colar o script na linha de comando. Dentro de seis meses, esqueci dessa ruga.
- Por que o bash está tentando fazer isso dentro de um heredoc?
Devido à estranheza mencionada acima com !
, tentei enviar os resultados para read
:
(curl ...
EOF
) | read x
... mas depois manipula o heredoc de alguma forma, e o servidor responde com o equivalente de "JSON inválido".
Se eu usar cat
em vez de curl
, o heredoc parece estar vazio, por acaso.