引用されたコマンドパラメータの生成

引用されたコマンドパラメータの生成

私は非常に特定の署名付きヘッダー+ 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 bartestcurlfoo bar$(echo test)

関連情報