web-dev-qa-db-ja.com

CURL出力をファイルにリダイレクトする方法とbash関数パラメーターとして

カール出力を$LOGに、またjson_extract関数の2番目のパラメーターとして作成するにはどうすればよいですか。

json_extractは、2つの引数を取る関数です。 「キー」とjson文字列(CURLの出力)

param=$(json_extract $jsonkey "$(curl -H "Accept: application/json" \
    -H "Content-Type:application/json" \
    -X POST --data "$data" $url >> $LOG )")

$LOGへのリダイレクトを削除すると、CURL出力がjson_extractの引数として渡されます。

2
skirix

1つのコマンドの出力を複数回使用したいようです。その場合は、変数に格納して、必要な場所でその変数を使用する必要があります。例えばこのようなことを試してください:

response="$(curl -H "Accept: application/json" -H "Content-Type:application/json" \
  -X POST --data "$data" "$url")"

echo "$response" >> "$LOG"
param=$(json_extract "$jsonkey" "$response")

もう1つの方法は、teeを使用することです。これは、コマンドの出力をファイルと標準出力に送信します。例えば:

param=$(json_extract "$jsonkey" "$(curl -H "Accept: application/json" \
    -H "Content-Type:application/json" \
    -X POST --data "$data" "$url" | tee -a "$LOG" )")

個人的には、 "$ response"のような変数を使用すると、コードが読みやすく、理解しやすくなることがわかりました。特に、非常に長くて複雑なワンライナーを、短くてわかりやすい複数のラインに分割できる場合に役立ちます。

3
cas