인용된 명령 매개변수 생성

인용된 명령 매개변수 생성

저는 매우 특정한 서명된 헤더 + 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 bartestcurlfoo bar$(echo test)

관련 정보