私は非常に特定の署名付きヘッダー+ 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
出力の場合、最初は引数として呼び出され、2"foo bar" "$(echo test)"
番目は引数としてcurl
呼び出されます。foo bar
test
curl
foo bar
$(echo test)