複数のAPI呼び出しを取得するためにカールを使用するbashスクリプトを短縮するには、次の手順を実行する必要があります。
curl --user $USER:$PASS https://api.example.com/foo -o 'foo.json'
curl --user $USER:$PASS https://api.example.com/bar -o 'bar.json'
curl --user $USER:$PASS https://api.example.com/baz -o 'baz.json'
次の形式で使用してください。
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
問題は、カールがfoo、bar、bazを取得しますが、出力をfoo.json、bar.json、baz.jsonに割り当てないことです。実際に #1.jsonを生成し、出力をstdoutにパイプします。一重引用符、二重引用符を試してみましたが、同じ結果で引用符を使用しませんでした。これはbashスクリプト内で実行されますが、curlコマンドはコマンドラインに直接入力するのと同じ方法で動作します。これはOS X構文の問題ですか?
答え1
あなたの問題はその{...}
表現です返品有効なシェル構文。たとえば、次のようにします。
echo file/{one,two}
あなたは以下を得ます:
file/one file/two
したがって、実行するとき:
curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'
{foo,bar,baz}
あなたに説明を受けますシェル、curl
実際にコマンドラインを受け取ります。
curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'
curl
表情が見えないので、{...}
得られる魔法はない#1
。解決策は簡単です。 URLを一重引用符で囲むだけです。
curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'
一重引用符は文字列のシェル拡張を無効にします。