Estou tentando escrever um script que executará duas solicitações de curl no bash. Este é o meu código:
#!/bin/bash
ipadd="192.168.1.1"
start_url="http://$ipadd/startPlayer"
stop_url="http://$ipadd/stopPlayer"
header1="Accept: application/json"
header2="Content-Type: application/json"
stp="28508ab5-9591-47ed-9445-d5e8e9bafff6"
function start_player {
curl --verbose -H \"${header1}\" -H \"${header2}\" -X PUT -d '{\"id\": \"$stp\"}' ${start_url}
}
function stop_player {
curl -X PUT $stop_url
}
stop_player
start_player
A função stop_player funciona sem problemas, mas a primeira função não funciona. Eu só quero executar a seguinte solicitação CURL: curl --verbose -H "Accept: application/json" -H "Content-Type: application/json" -X PUT -d '{"id": "c67664db-bef7-4f3e-903f-0be43cb1e8f6"}' http://192.168.1.1/startPlayer
Se eu repetir a função start_player, a saída é exatamente como deveria ser, mas se eu executar a função start_player, recebo um erro: Could not resolve host: application
. Acho que é porque o bash está dividindo os cabeçalhos, mas por que funciona bem com o eco, mas não no bash?
Você escreveu:
mas parece que você realmente quer:
Com os valores que você definiu para
header1
eheader2
, o primeiro faria comcurl
que recebesse como parâmetros--verbose
,-H
,"Accept:
,application/json"
,-H
,"Content-Type:
eapplication/json"
, enquanto você realmente deseja cada valor de cabeçalho como seu próprio token, que as aspas duplas sem escape fornecerão.Além disso, vejo você passar
-d '{\"id\": \"$stp\"}'
. Você provavelmente quer-d "{\"id\": \"$stp\"}"
lá.Quanto à sua pergunta sobre por que as coisas parecem funcionar bem no echo, "mas não no bash", bem, as coisas não funcionaram bem com o echo, é só que isso torna esse fato difícil de ver.
Comparar:
Com: