Curl - パラメータリストが長すぎます。

Curl - パラメータリストが長すぎます。

私の問題は次のようになりますcUrl:パラメータリストが長すぎます。

Unixシェルスクリプトでは、CURLに次のコマンドを送信します。

var=$(base64 sample.pdf | perl -pe 's/\n//g')
var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d' { "'"data"'" : "'"$var"'" }')
echo $var1

次のエラーが発生します。curl: /usr/bin/curl: cannot execute [Argument list too long]

長いパラメータ制限なしで別のファイルから "base64"コンテンツを読み取るために上記のCURLコードを書き換えるのに役立つ人はいますか?

答え1

問題が解決しました。

私は次のことを試してみました。

var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @test.json)
echo $var1

答え2

あるシステムでは、/dev/fd/x次のこともできます。

var1=$(
  curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @/dev/fd/3 3<< EOF
 { "data" : "$(base64 sample.pdf | tr -d '\n')" }
EOF
)

シェルの実装に応じて、データは一時ファイルに保存されるか、パイプを介して提供されます。

zshまたはを使用して、bash次のこともできます。

var1=$(
  curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' \
    -d @<(
      printf ' { "data": "'
      base64 sample.pdf | tr -d '\n'
      printf ' }\n'
    )
)

これはやや効率的で、バイナリデータを出力するコマンドでも機能します。

関連情報