저는 매우 특정한 서명된 헤더 + JSON 본문 세트가 필요한 HTTP API를 사용하고 있습니다. 저는 디버깅과 전반적인 정신 건강을 위해 이것을 컬링하고 싶습니다.
그래서 호스트 이름, 경로 및 본문이 주어지면 모든 수정 작업을 수행한 다음 cURL 명령줄이 무엇인지 작성하는 작은 스크립트를 작성했습니다. 예를 들어.
./sign example.com /api/v1/foo/bar '{"foo":"bar"}'
example.com/api/v1/foo/bar -H 'x-sign:XXXXX', -H ... --data-binary '{"foo":"bar","sign":"xxx"}'
(네, 좀 복잡해 보이네요...)
나는 이것이 (ZSH에서) 쉽게 쉘링 가능하길 원합니다. 그래서:
curl -v $(./sign ...)
그러나 이로 인해 온갖 종류의 인용 오류가 발생합니다(또는 인용 방법에 따라 헤더 내용을 URL로 말리려고 시도합니다).
그것이 작동하는 유일한 방법은 현실이 되기에는 너무 투박하다고 느껴집니다.
sh -c "curl -v $(./sign ...)"
여기에 다소 인용된 옵션이 누락된 것 같습니다. 이 "좋은" 것을 얻는 방법에 대한 조언이 있습니까?
답변1
./sign
셸 코드를 출력하므로 셸 sh
이나 현재 셸을 통해 sh -c
평가 되어야 합니다 eval
.
eval "curl -v $(sign...)"
zsh
또한 (셸 코드에서 수행할 수 있는 확장을 수행하지 않고) 해당 참조만 해석할 수도 있습니다 .
curl -v "${(@Q)${(z)"$(sign)"}}"
where 는 (z)
따옴표를 해석하고 (Q)
제거합니다(그리고 (@)
따옴표 안에 빈 요소를 남깁니다).
sign
출력 인 경우 "foo bar" "$(echo test)"
첫 번째는 및 인수 curl
로 호출되고 두 번째는 및 인수 로 호출됩니다 .foo bar
test
curl
foo bar
$(echo test)